我正在尝试学习如何通过互联网将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号码)会发生什么?
如果有人能指出我正确的方向,那就太好了!我希望我的方法至少有点正确。
答案 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如何工作,这是用于网络调试的宝贵工具。