2

インターネットを介してTCPパケットを別のコンピューターに送信する方法を学習しようとしています。たとえば、コンピューター1はインターネットを介してコンピューター2にデータを送信します(TCPを使用)。両方のコンピューターにポート転送が正しく設定されていると仮定すると、2台のコンピューター間でTCP接続を確立するにはどうすればよいですか(Rubyの場合が望ましい)。LANで動作していますが、インターネットで試してみると動作しないようです。

私の試み(基本的に):

コンピューター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)

(コンピューター1でプライベートIPとポート32500番号を割り当てるのではなく)local_host=nilとlocal_port=nilをそのままにしておくとどうなりますか?

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです!私のアプローチが少なくともある程度正しいことを願っています。

4

1 に答える 1

1

ループバック インターフェイスでのみリッスンするサーバーを作成しました。

これを試してください:

curl ifconfig.me

123.123.123.123 のように、外部 IP アドレスが外部からどのように見えるかを取得します。

server = TCPServer.new 2000

これで、ポート 2000 でリッスンするサーバーができました

lsof -i :2000

例えば:

ruby 37186​​ wopi 6u IPv4 0xcf0818acc2bdc38d 0t0 TCP *:callbook (リッスン)

同じマシンからローカルホストに接続します

telnet localhost 2000

これは動作します

telnet 123.123.123.123 2000 # substitute your real external IP address

これは機能しません

そのため、外部から接続することはできません。

ngrep、netcat、および tcpdump がどのように機能しているかを確認してください。これは、ネットワーク デバッグ用の貴重なツールです。

于 2012-11-08T09:19:53.297 に答える