6

概要:同じマシン上に存在する2つの物理インターフェイス間でデータを渡すためのソケットを作成しようとしています。Win32ソケットは、物理インターフェイスを介してプッシュするのではなく、常にトラフィックをカーネルに直接転送します。おそらくデバイス設定、レジストリの微調整、ルーティングテーブルのシェナニガン、またはソケットオプションを使用して、この動作を無効にする方法はありますか?WindowsXPSP3を使用しています。

いくつかの背景。カスタムIPv4機器を実行するために、完全に自動化されたIPテストを構築しようとしています。Windows XPマシンの大規模なラボがあり、接続しているデバイスごとに個別の物理イーサネットインターフェイスがあります。私たちのデバイスは、事実上、それぞれが独自のIPを持つイーサネットルーターです。

ラボのマシンからデバイスを介してデータを送信してから、同じコンピューターに戻す必要があります。ユニキャストおよびマルチキャストUDP、TCP、およびブロードキャストIPトラフィックをデバイスを介して送信します。

トラフィックが宛先と同じマシンで発信されることを望んでいます(そしておそらく必要です)。これを行うには、それぞれが独自のサブネット上に独自のIPを持つ2つの別々のNICを構成します。たとえば、NIC#1は10.0.0.1 / 24で、NIC#2は10.0.1.1/24です。この場合、デバイスは単純なパススルールーターのように機能し、2つのインターフェイスを備えています。1つは10.0.0.0/24サブネット上にあり、もう1つは10.0.1.0/24サブネット上にあり、パケットをやり取りするだけです。

データを生成するために、Win32ソケットを使用できるようにしたいと考えています。これは、Win32ソケットが十分に理解され、十分にサポートされており、お客様が使用しているものであり、おそらく最も迅速なアプローチであるためです。パケットインジェクションは、UDPおよびブロードキャストIPではおそらく実行可能ですが、TCPでは実行可能ではない可能性が非常に高くなります。パケットインジェクションを使用したアイデアを楽しませたいと思いますが、標準のWin32ソケットを強く好みます。

要約で述べられているように、パケットがマシンを離れることはありません。私は狂人のようにグーグルで検索しましたが、あまり見つかりませんでした。何か案は?

4

3 に答える 3

5

WindowsのコマンドラインROUTEユーティリティを使用します。特定のサブネット上の特定のIPアドレスに送信されたIPパケットが別のIP/デバイスに送信されるように構成できます。例えば:

route ADD <NIC_1_IP> MASK <NIC_1_SUBNET> <DEVICE_IP_CONNECTED_TO_NIC_2> METRIC 1
route ADD <NIC_2_IP> MASK <NIC_2_SUBNET> <DEVICE_IP_CONNECTED_TO_NIC_1> METRIC 1

または、NICインターフェイスのインデックス番号がわかっている場合は、代わりにそれらを指定できます。

route ADD <NIC_1_IP> MASK <NIC_1_SUBNET> METRIC 1 IF <NIC_2_INTF>
route ADD <NIC_2_IP> MASK <NIC_2_SUBNET> METRIC 1 IF <NIC_1_INTF>

このように、パケットがNIC#1のIPに送信されるたびに、パケットはNIC#2に接続されたデバイスに送られ、NIC#1に渡されます。NIC#2のIPに送信されるパケットの場合はその逆です。

たとえば、これは、PCがルーターを使用してネットワークに接続されている場合にWireSharkがローカルIPトラフィックをキャプチャできるようにするための便利な手法です。あるローカルIP/ポートから別のローカルIP/ポートへのパケットは、ルーターからPCにバウンスされ、WireSharkが監視できる物理インターフェイスを通過します(WireSharkは、各ローカルパケットの重複コピー(1つはアウトバウンドと1つはインバウンド)を認識します)。ただし、重複を除外することはできます)。

于 2011-01-28T23:26:18.607 に答える
0

Winsockは常にパケットデータをカーネルスペースに持ち込み、そこで処理します。つまり、汎用APIの要点は、すべてのデバイスが同じ「レイヤー」で処理されるということです。Winsockを使い続けたいのであれば、この動作を回避できる(または回避したいと思う)とは思いません。

TransmitPacketsまたはを使用してコピーするバッファの一部を削除できますがTransmitFile、2つのデバイスインターフェイス間で削除することはできません。

そうは言っても、Winsockが実行する追加のバッファコーピングでパフォーマンスの問題が発生していますか?セキュリティ上の懸念はありますか?

于 2011-01-27T23:36:49.587 に答える
0

テスターのエンドポイントを個別の仮想マシン内で実行するのはどうですか?次に、必要なハードウェアは1つだけですが、互いにローカルであることを認識しない個別のTCP / IPスタックがあります(ほとんどのVMソリューションは、パケットを変更せずにホストに直接渡します。ホストはそうは思いません。 VM間のブリッジングを構成しない限り、パケットを取得して別のVMに直接送信します...ただし、各VMを異なる物理ネットワークアダプターにバインドします)。

于 2011-01-28T03:11:52.703 に答える