2012-11-08 87 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