1

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 を使用しています。

4

1 に答える 1