私は別のNIC(Network Interface Card)上の複数の独立したネットワークにマシンを接続しています。マシンはWindows 7を実行します。C++で書かれたアプリケーションで特定のNICを指定する方法(boost asio)
TCPを使用して、特定のNICを介して特定のIPに接続する必要のあるアプリケーションをマシンで実行します。アプリケーションは、ネットワーキングにC++ 11とboost asio(1.53.0)を使用し、ソースを変更することができます。
Windows環境でこの問題(エンドポイントIPとNICを指定)を解決するうえで、合理的な方法は何ですか?
現在のソリューションは、コマンドライン "route"コマンドを使用して、ルーティングテーブル内の正しいNICにIPのそれぞれの(ブロック)を永続的なルートとして割り当てます。そうすれば、OSは問題を処理しますが、これは許可されていますが必須ではありません。
バインドエンドポイントはNICを指定しますが、接続エンドポイントは通常のターゲットエンドポイントですが、正しいですか?これまでのところ正しいとすれば、私はNICを指定するエンドポイントを取得する方法についていません。 – Peter
@Peterはい正しいです、各エンドポイントはTCPソケットの4タプルの一部を指定します:クライアントIP、クライアントポート、サーバIP、サーバポート。クライアントエンドポイントの場合は、そのNICのIPアドレスを使用し、ゼロを使用して一時的なポートを選択する必要があります。 –
ありがとうございました。したがって、ここの追加情報に基づいて:http://stackoverflow.com/questions/6594523/how-could-i-get-or-change-the-ip-address-of-a-disconnected-nic-in-windows MACなどのNICの静的プロパティを使用して、構成内にNICを指定することができます。次に、実行時に、指定したMACなどを使用してOS固有の呼び出し(たとえば、前述のもの)を使用してNICのIPを取得し、NIC IPを使用してソケットをNICにバインドします。 – Peter