gpt4 book ai didi

ruby - 通过 Internet 发送 TCP 数据包(使用 Ruby)

转载 作者:可可西里 更新时间:2023-11-01 02:42:59 24 4
gpt4 key购买 nike

我正在尝试学习如何通过 Internet 将 TCP 数据包发送到另一台计算机。也就是说,计算机 1 通过 Internet 将数据发送到计算机 2(使用 TCP)。假设两台计算机都正确设置了端口转发,我将如何在两台计算机之间建立 TCP 连接(最好使用 Ruby)?我在我的 LAN 上运行它,但是当我通过 Internet 尝试时,它似乎不起作用。

我的尝试(基本上):

计算机 1:

server = TCPServer.new 32500
client = server.accept

计算机 2:

TCPSocket.new PUBLIC_IP_OF_COMPUTER_1, 32500

问题是 TCPSocket 永远不会连接到 TCPServer。

我在 Ruby 文档中读到 TCPServer.new 的语法是

new(remote_host, remote_port, local_host=nil, local_port=nil)

如果我只保留 local_host=nil 和 local_port=nil(而不是在计算机 1 上为它们分配私有(private) IP 和端口号 32500),会发生什么情况?

如果有人能给我指出正确的方向,那就太好了!我希望我的方法至少在某种程度上是正确的。

最佳答案

您创建了一个仅在环回接口(interface)上监听的服务器。

试试这个:

curl ifconfig.me

您将获得您的外部 IP 地址,它是如何从外部可见的,例如 123.123.123.123

server = TCPServer.new 2000

现在你有一个监听端口 2000 的服务器

lsof -i :2000

例如:

ruby 37186 wopi 6u IPv4 0xcf0818acc2bdc38d 0t0 TCP *:callbook (LISTEN)

现在从同一台机器连接到本地主机

telnet localhost 2000

这行得通

telnet 123.123.123.123 2000 # substitute your real external IP address

这行不通

这就是为什么你不能从外部连接。

检查 ngrep、netcat 和 tcpdump 是如何工作的,这些都是网络调试的宝贵工具。

关于ruby - 通过 Internet 发送 TCP 数据包(使用 Ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13282926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com