問題タブ [nat-traversal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# で無料の STUN および TURN サーバーを使用した NAT トラバーサル
これは私の以前の投稿です:
C# で無料の STUN および TURN サーバーのみを使用する NAT トラバーサル
ピアツーピアで通信するオンライン アプリケーションを作成しています。ほとんどのユーザーは、NAT の背後にあるプライベート ネットワークにいることが想定されており、私はそれをトラバースする必要があります。私は外部サーバーを購入する余裕がないので、依存できるのはNumbのような無料のサーバーだけです(つまり、独自の実装や拡張機能を提供することはできません)。
しかし、いくつかの調査の結果、そのようなサーバーの使用方法がわかりませんでした。C# で使用できるライブラリも見つかりませんでした。
このようなサーバーを使用して、ネットワーク経由で接続を確立するにはどうすればよいですか? それらを簡素化するライブラリはありますか?(私は高校生で、無料のものしか使えません。) ICE プロトコルも実装されているとよいでしょう。
UPnP を使用することを提案する人もいましたが、実際にはうまくいきましたが、ルーターで UPnP をオンにすることを好まないユーザーもいました。だからこそ、ここでもう一度質問します。
java - 外部ホストを使用せずにデバイスの外部 IP アドレスをプログラムで見つける方法は?
デバイスの IP アドレスを読み取ると、常にローカル IP アドレスが取得されます。
そのために、次のコード スニペットを使用します。
しかし、外部ホストやhttp://jsonip.comなどの Web API を使用せずに、外部 IP アドレスを読み取る必要があります。
java - Ice4j: IcePseudoTcp のテスト - STUN サーバーが必要ですか?
IcePseduoTcp をテストするプロセスを知っている人はいますか? それは自己完結型ですか、それとも動作させるために STUN サーバーを指す必要がありますか?
python - STUN に接続すると、外部 IP アドレスが返されます
ポート 4000 でリッスンしている NAT の背後にある Web サーバーに接続しようとしています。
私のウェブサーバーで、pystun ( https://github.com/jtriley/pystun ) とコマンドを使用:
$ pystun -p 4000
戻り値があります
NAT Type: Symmetric NAT
External IP: <ip>
External Port: 1024
しかし、http://:1024 からアクセスしようとすると、接続できず、常に応答待ちのままになります。
これは STUN を使用する正しい方法ですか?
java - STUN リクエストから外部 IP アドレスと外部ポート番号を取得するにはどうすればよいですか?
WiFi ルーターの NAT の背後にいます。ポート 20,000 からパケットを送信すると、ポート 56867 で WiFi ルーターから送信されます。出力ポート番号 (56867) をプログラムで取得できるようにしたいのですが、STUN プロトコルを介して取得しようとしています。
https://code.google.com/p/openwonderland-jvoicebridge/source/browse/branches/jp/stun/src/com/sun/stunのパッケージ「com.sun.stun」の STUN クライアント コードを使用しています。 /StunClient.java . 次のコードを記述して、STUN クライアント コードを使用して外部 IP アドレスとポート番号を取得しようとしました。
私の出力は次のようになります。
問題は、 stunClient1.getMappedAddress() が DatagramSocket のバインド アドレスとエフェメラル ポート番号を提供していて、パブリック IP とパブリック ポート番号を取得したいことです。助けてください。
* 説明/明確化 *
DatagramSocket を作成すると、OS/Java によってエフェメラル ポート番号 (この場合は 58100) が割り当てられます。NAT を備えた Wifi ルーターがあります。ルーター経由で stun.ekiga.net にパケットを送信すると、stun.ekiga.net が応答を返す外部ポート番号が内部ポート番号と同じではありません。STUN サーバーが応答している外部ポート番号が必要です。
* お役立ち情報 *
次の STUN パケットを受け取りました。
stun パケットのバイナリ データからパブリック/外部ポート番号を抽出するにはどうすればよいですか?
android - NAT の背後での作業 - デバイス通信のスキーム
組み込みデバイス (xMega128(C) ベース) と Android アプリ間のデータ交換を可能にするソリューションを考え出そうとしています。問題は、データ交換をインターネット経由で行う必要があり、組み込みデバイスとアプリを実行するモバイル デバイスの両方が異なる NAT の背後にあり、異なる ISP、3G、LTE などを使用して接続できることです。
UDP ホール パンチングを試しましたが、対称 NAT では機能しません。予測付きの多穴パンチングも、100% の信頼性を保証するものではありません。ICE の使用も検討しましたが、ICE C ライブラリ (pjnath、libnice) は選択したハードウェアと互換性がありません (ライブラリには os が必要です)。現在、トラフィックリレーサーバーの実装または使用 (存在する場合) を検討していますが、それは私にはハックのように思えます。
私が考慮していなかった他のオプションはありますか?どんな助けでも大歓迎です。
理想的には、通信スキームは次のようになります。
100%信頼できる
比較的低遅延 (絶対最大 3 秒)
スケーラブル (将来的には最大 50 万デバイス)
アプリとデバイスの両方で初期化可能
マルチユーザー – 1 つのデバイスが多数の Android アプリに接続します
また、これが役立つ場合、デバイスとアプリの間のデータ交換はそれほど激しくありません。1 時間あたり約 1 セッション、1 セッションあたり最大 50 件のメッセージが 10 ~ 20 秒間隔で送信され、各メッセージの重量は約 100 バイトです。