UDPホールパンチング方式でp2p接続しようとしているのですが、常にDestination unreachable状態のICMPパケットが出てきます。
最初に、サーバーへの UDP 接続が作成されます。
send = new IPEndPoint(IPAddress.Any, 0);
server = new UdpClient(send);
server.AllowNatTraversal(true);
直接接続なし(IPなし、ポートなし、ランダムポートのエンドポイントのみ)。
server.send([..],[..],serverip,serverport)
サーバーのIPとポートに直接送信してサーバーにいくつかのパケットを送信し、別のピアに関する情報(リモートIP、サーバーへの接続に使用されるポート)を取得します
今、サーバー接続を使用してピアの IP:PORT に単純な UDP パケットを送信することでホール パンチを作成しようとしています (ただし、直接使用しますserver.send([..], [..], peerip, peerport)
)。最初のパケットは常にドロップされることがわかっているので、リモート ピアが同じことをしている間、100 ミリ秒間隔で 50 個送信しています。
UDPホールパンチング方法を理解していれば、最初のピア( A )からパケットを送信すると、 AのNATでNATレコードが開き、NATにレコードがないため、 BのNATによってドロップされます。したがって、B がAにパケットを送信すると、最初のパケット (B 用) で作成されたAの NATにレコードがあり、パケットはBによって受信されるはずです。BのNAT に NAT レコードが作成されます。Aは別のパケットをBに正常に送信する必要があります。
PS: http://nattest.net.in.tum.de/test.phpテストは成功しました http://nattest.net.in.tum.de/individualResult.php?hash=a5f229d156d4f5409a305c37729d9510 http://nattest.net .in.tum.de/individualResult.php?hash=3fd60e888721908a9480cd12836b97af - 2 番目の VM で VPN を使用
PPS: Virtual Box で仮想化された Windows を使用しています。