2012-11-08 88 views
1

我想了解如何通过互联网向另一台计算机发送TCP数据包。所以说,计算机1通过互联网向计算机2发送数据(使用TCP)。假设两台计算机的端口转发设置正确,我将如何去建立两台计算机之间的TCP连接(最好是Ruby)?我有它在我的局域网上工作,但当我尝试通过互联网时,它似乎并没有工作。通过互联网发送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 =零和LOCAL_PORT =零(而不是将它们分配私有IP地址和端口号32500计算机1)?

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

+1

http://workingwithtcpsockets.com/是你的一个必读,它是关于与红宝石网络 – astropanic

回答

1

您创建的服务器仅在回送接口上进行侦听。

尝试了这一点:

curl ifconfig.me 

你会得到你的外部IP地址,它是如何从外部可见的,比如123.123.123.123

server = TCPServer.new 2000 

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

lsof -i :2000 

例如:

红宝石37186​​ wopi 6U的IPv4 0xcf0818acc2bdc38d 0t0 TCP *:callbook(LISTEN)

现在从同一台计算机连接到localhost

telnet localhost 2000 

这个作品

telnet 123.123.123.123 2000 # substitute your real external IP address 

这将不工作

Tha t就是为什么你不能从外面连接。

签出如何ngrep,netcat和tcpdump工作,非常有价值的网络调试工具。

+0

嗨,你知道我在哪里可以找到更多关于这个东西的文档?例如,Ruby似乎没有一个名为Curl的类,是否可以使用TCPSocket而不是telnet? –

+0

curl是一个二进制文件,您可以在bash/zsh shell中输入它,而不是在ruby控制台中,与我的文章中的telnet,netcat和lsof相同。你有卷曲的红宝石绑定,称为遏制,但这是另一个故事,与你无关。 – astropanic

+0

你可以很好地使用netcat来通过网络进行通信(telnet也可以),但这是一个二进制文件,而不是红宝石库。看看我在上面的命令中发布的书,当你想用ruby做网络的时候。 – astropanic