問題タブ [multihomed]
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# - 利用可能なすべてのネットワークカードにUDPメッセージをブロードキャストする
特定のIPとポートにUDPメッセージを送信する必要があります。
ネットワークカードが3枚あるので、
UDPメッセージを送信すると、1つのネットワークアダプターでのみメッセージを受信しています...残りのIPは受信していません。
メッセージの送信中にネットワークアダプタを確認したい。どうやってやるの?
現在、私は以下を使用しています:
c# - 問題 利用可能なネットワークにパケットをユニキャストしようとしている
利用可能なネットワークにパケットをユニキャストしようとしています。全部で 3 つのネットワークがあります。1つのネットワークでのみパケットを取得できましたが、別のネットワークでパケットを受信できません。
このコードを使用して..
問題は何ですか?ありがとう。
java - マルチホーム システム (Java、Linux) でマルチキャストを使用する方法
これは Java ですが、必要に応じて JNI 経由でいつでも C に戻すことができます。
2 つの NIC を備えたシステムがあり、それぞれが別個のサブネットに接続されています。マルチキャスト (特に SDP) を使用して、両方のネットワーク上の他のホストを検出したいと考えています。
1 つのネットワークは簡単です。指定されたポートで MulticastSocket を作成し、それを joinGroup にすると、パケットが取得されます。シンプルさ。
2 つのネットワーク: これまでのところ不可能です。私はもう試した:
1) 2 つのソケットを作成し、同じポートにバインドし、setInterface() または setNetworkInterface() を使用して正しいインターフェースに「接続」します。setReuseAddress() のさまざまな順列の後でも、うまくいきません。
2) 1 つのソケットを作成し、joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) を 2 回呼び出して、2 回参加を試みます。2 番目の参加呼び出しは失敗します。
Java以外のソリューションは素晴らしいでしょう。特に、2 つのインターフェイスを効果的に「結合」するマルチキャスト ルートを設定できれば (その後、各パケットを調べてどのネットワークかを判断できます)、それで問題ありません。前に述べたように、この環境 (Apache "luni" Java インフラストラクチャを備えた Linux) では、任意の量のネイティブ コードを使用できます。
ありがとう!
windows - マルチホームWindowsPCでのマルチキャストメッセージの受信
私はマルチキャスト/UDPに基づくいくつかのネットワークインターフェースを備えたPC上で診断ツールを開発しています。ユーザーはNICを選択でき、アプリケーションはソケットを作成し、それらをこのNICにバインドして、特定のマルチキャストグループに追加します。
マルチキャストメッセージの送信は正常に機能します。ただし、メッセージの受信は、ソケットをPCの特定のNICにバインドした場合にのみ成功します。Windowsでマルチキャストメッセージを受信するための「デフォルト」NICがあり、これは常にGetAdapterInfo関数によって返される最初のNICであるように見えます。
Wiresharkでネットワークを監視したところ、「IGMP Join Group」メッセージが、ソケットをバインドしたNICから送信されたのではなく、この「デフォルト」のNICから送信されていることがわかりました。
このNICを無効にする(またはネットワークケーブルを取り外す)と、GetAdapterInfoによって返されるリストの次のNICがマルチキャストメッセージの受信に使用されます。
PCのルーティングテーブルにエントリを追加することで、この「デフォルト」のNICを変更することに成功しましたが、これは問題の良い解決策ではないと思います。
この問題は、以下に追加されたコードでも発生します。参加グループメッセージは、192.168.52経由ではなく、別のNIC経由で送信されます。
助けてくれてありがとう!
c++ - 最初のIPが不良の場合に、winhttpを使用してマルチホームホストに接続する
ここで説明されている機能を確認しようとしています:
http://msdn.microsoft.com/en-us/library/aa384066(VS.85).aspx
WINHTTP_OPTION_CONNECT_RETRIESWinHTTPがホストへの接続を試行する回数を含む符号なし長整数値を設定または取得します。Microsoft Windows HTTPサービス(WinHTTP)は、インターネットプロトコル(IP)アドレスごとに1回だけ試行します。たとえば、10個のIPアドレスを持つマルチホームホストに接続しようとし、WINHTTP_OPTION_CONNECT_RETRIESが7に設定されている場合、WinHTTPは最初の7個のIPアドレスにのみ接続を試みます。同じ10個のIPアドレスのセットが与えられ、WINHTTP_OPTION_CONNECT_RETRIESが20に設定されている場合、WinHTTPは10個のそれぞれを1回だけ試行します。指定された回数の試行後も接続の試行が失敗する場合、またはそれ以前に接続タイムアウトが期限切れになった場合、要求はキャンセルされます。WINHTTP_OPTION_CONNECT_RETRIESのデフォルト値は5回の試行です。
実際に動作します。
私のコードは:
これをテストする1つの方法は、これをC:\ WINDOWS \ system32 \ drivers \ etc\hostsファイルに配置することです。
タイプ
(これは失敗するはずです)そして
google.comの2つのDNSレコードが表示されます。
上記のように、デフォルト値は5です。これは、2番目のIPを試行する必要があることを意味しますが、そうではありません。私は何が欠けていますか?
sockets - マルチホームサーバーのデフォルト以外のインターフェイスでマルチキャストデータを受信する方法
2つのNIC(eth0とeth1)を備えたLinuxサーバーがあり、「iproute」でデフォルトとしてeth0を設定しています。ここで、eth1でマルチキャストパケットを受信したいと思います。ルーティングテーブルに「224.0.20.0/24deveth1 proto static scope link」を追加し、次のように接続します。
それによると、ip maddr
それは正しいインターフェースでそのグループに接続し、tshark -i eth1
私が実際にマルチキャストパケットを取得していることを示しています。
ただし、を呼び出すとパケットが届きませんrecvfrom(sock)
。「iproutedefault」を(eth0ではなく)eth1に設定すると、recvfromを介してパケットを取得します。これは私のコードまたはネットワーク設定の問題ですか?これを行う正しい方法は何ですか?
(更新)解決策: cafは、これが同じ問題である可能性があることを示唆しました。確かに:実行した後echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
、マルチキャストパケットを受信できるようになりました!
c# - IPアドレスのバインドは初めて機能します
サーバーで使用可能なIPアドレスの1つからWeb要求を行いたいので、次のクラスを使用します。
それで:
しかし、このソリューションは初めて機能します。
c - SCTP マルチホーミング
私はこの単純なクライアント - サーバー アプリケーションを C で開発してきました。クライアントはサーバーにランダム データを送信するだけで、サーバーはクライアントの送信内容をリッスンするだけです。私が使用しているプロトコルは SCTP で、マルチホーミング機能を実装する方法に興味があります。
SCTP とマルチホーミングについてインターネットで検索してきましたが、通信に複数のアドレスを使用するように SCTP に指示する方法の例を見つけることができませんでした。マルチホーミングで SCTP をセットアップしようとするときに使用するコマンドを見つけることができただけで、非常に簡単なはずです。
クライアントとサーバーを作成しましたが、どちらもコンピューターの 2 つの WLAN インターフェイスを接続ポイントとして使用しています。両方のアダプターが同じ AP に接続されています。サーバーはこれらのインターフェイスからクライアントからのデータをリッスンしており、クライアントはそれらを介してデータを送信します。問題は、クライアントがデータを送信しているプライマリ WLAN アダプタを切断すると、セカンダリ接続にフォールバックする必要があるときに送信が停止することです。Wireshark を使用してパケットを追跡したところ、最初の INIT および INIT_ACK パケットは、クライアントとサーバーの両方が通信リンクとして WLAN アダプターを使用していることを報告しています。
プライマリ WLAN 接続を再接続すると、しばらくすると送信が継続し、サーバーに大量のパケットがバーストしますが、これは正しくありません。パケットはセカンダリ接続を介して送信されているはずです。多くのサイトでは、SCTP は自動的に接続を切り替えると言われていますが、私の場合はそうではありません。クライアントとサーバーがセカンダリ アドレスを含む互いのアドレスを認識しているにもかかわらず、プライマリ リンクがダウンしているときに、送信がセカンダリ接続にフォールバックしない理由の手がかりはありますか?
サーバーについて:
サーバーは SOCK_SEQPACKET タイプのソケットを作成し、INADDR_ANY で見つかったすべてのインターフェイスをバインドします。getladdrs は、サーバーが 3 つのアドレス (127.0.0.1 を含む) にバインドされていることを報告します。その後、サーバーはソケットをリッスンし、クライアントがデータを送信するのを待ちます。サーバーは sctp_recvmsg 呼び出しでデータを読み取ります。
クライアントについて:
クライアントは SEQPACKET ソケットも作成し、コマンドライン引数で指定された IP アドレスに接続します。この場合の getladdrs は、サーバーの場合と同様に 3 つのアドレスも返します。その後、クライアントは、ユーザーが Ctrl-C で送信を中断するまで、サーバーへの 1 秒の遅延でサーバーへのデータの送信を開始します。
ソースコードは次のとおりです。
サーバ:
そしてクライアント:
それで、私が間違っていることの手がかりはありますか?
sockets - マルチホーム ホストでのインターフェイスの選択
C でソケットを介してプログラミングする場合、関数をノード asおよびフラグ in でgetaddrinfo
呼び出すことにより、関数を介してインターフェイスに関する情報を自動的に取得できます。ing およびing 接続に適した構造のリストを返します。デフォルト インターフェースが設定されたマルチホーム ホストでは、正しいインターフェースではない可能性があるデフォルト インターフェースに関連する構造体が返されます。適切なインターフェイスを選択できるように、使用可能なすべてのインターフェイスから構造体を返すように呼び出す方法。NULL
AI_PASSIVE
hints.ai_flags
addrinfo
bind()
accept()
getaddrinfo
getaddrinfo