2

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

我的尝试(基本上):

电脑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 上为它们分配私有 IP 和端口 32500 号)会发生什么?

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

4

1 回答 1

1

您创建了一个仅在环回接口上侦听的服务器。

试试这个:

curl ifconfig.me

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

server = TCPServer.new 2000

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

lsof -i :2000

例如:

红宝石 3​​7186​​ 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 是如何工作的,它们是网络调试的宝贵工具。

于 2012-11-08T09:19:53.297 回答