2

私が次のことをした場合:

UdpClient c = new UdpClient();
c.Connect(new System.Net.IPEndPoint(IPAddress.Parse("69.65.85.125"), 9900));
c.Send(new byte[] { 1,2,3,4,5 }, 5);

次に、ルーターにパケットを送信し、ルーターはそのパケットをIP「69.65.85.125」に送信します。

IP「69.65.85.125」を持つコンピューターでそのパケットをどこでキャプチャすると、ルーターによって開かれたポートを確認できます ( client.RemoteEndpoint)。他のエンドポイントでパケットをキャプチャせずに、その情報を確認するにはどうすればよいでしょうか? ルーターに問い合わせる方法はありますか?

4

2 に答える 2

2

パブリック IP を取得するために、リモート デバイスは、認識した IP アドレスとポートを含む UDP パケットを送信して応答する必要があります。これは、 STUNサーバーの背後にある最も基本的な概念の 1 つであり、UDP ホール パンチング アルゴリズムで一般的に使用されます。

まさにこれを行う無料の STUN サーバーがいくつかあります。それらの 1 つに「バインディング」リクエストを送信すると、パブリック IP アドレスとポートを含む応答が返されます。

stun.l.google.com:19302
stun1.l.google.com:19302
stun2.l.google.com:19302
stun3.l.google.com:19302
stun4.l.google.com:19302
stun01.sipphone.com
stun.ekiga.net
stun.fwdnet.net
stun.ideasip.com
stun.iptel.org
stun.rixtelecom.se
stun.schlund.de
stunserver.org
stun.softjoys.com
stun.voiparound.com
stun.voipbuster.com
stun.voipstunt.com
stun.voxgratia.org
stun.xten.com

適切な UDP ホール パンチングに本当に興味がある場合は、ICE (Interactive Connectivity Establishment)を調べてください。これは、STUN とTURNと呼ばれる別のプロトコルを使用して、ピア間の正常な接続を保証する優れたアルゴリズムです。(Apple は Facetime ビデオ通話などに使用します。)

興味があれば、私が働いている会社は、ICE/STUN/TURN を使用してピア間の直接データ ストリームを確立するIceLinkという製品を開発しました。SDK は、.NET、Mac、iOS、Android、Java、Windows Phone、Windows 8、Unity、Xamarin などで利用でき、WebRTCオーディオ/ビデオ ストリームの完全なサポートも含まれています。

于 2013-07-17T21:53:08.157 に答える
2

ルーターがサポートしている場合は、UPnP 経由でクエリを実行できます。これは .NET 用に見つけた UPnPのラッパー ライブラリです。使用したことがないので、良いか悪いかのアドバイスはできません。

ライブラリの zip 内のサンプル コードについては、ComponetsTest プログラムを参照してください。サービスに対してどのような呼び出しを行う必要があるかを確認するには、 UPnP のドキュメントを参照する必要があります。

ポートマッピングを見つける方法を尋ねる誰かの図書館のメッセージボードから。

WANPPPConnection および WANIPConnection サービスには、GetSpecificPortMappingEntry と呼ばれるアクションがあり、エラーが返されるまで 0 からインデックスを繰り返し呼び出します。各呼び出しは別の UPnP ポート マッピングを返します。別のサービスで静的マッピングを取得することもできます。

于 2013-05-31T01:08:57.737 に答える