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

时间:2012-11-08 05:22:21

标签: ruby sockets networking tcp tcpclient

我正在尝试学习如何通过互联网将TCP数据包发送到另一台计算机。因此,计算机1通过互联网将数据发送到计算机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号码)会发生什么?

如果有人能指出我正确的方向,那就太好了!我希望我的方法至少有点正确。

1 个答案:

答案 0 :(得分:1)

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

试试这个:

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)

现在从THE SAME机器连接到localhost

telnet localhost 2000

这是有效的

telnet 123.123.123.123 2000 # substitute your real external IP address

这不起作用

这就是你无法从外面联系的原因。

查看ngrep,netcat和tcpdump如何工作,这是用于网络调试的宝贵工具。