6

Windows 7 マシンにTAP-WIN32 Adapter V9をインストールしました。インターフェイスから IP パケットを読み取るために TUN を使用したいと考えています。http://www.varsanofiev.com/inside/using_tuntap_under_windows.htmの C# サンプルに従いました 。

以下のようにコードを修正しました

IntPtr ptun = Marshal.AllocHGlobal(8);       
Marshal.WriteInt32(ptun, 0, 0x0a030001);
Marshal.WriteInt32(ptun, 4, unchecked((int)0x00ffffFF));
bool val = DeviceIoControl (ptr, TAP_CONTROL_CODE (5, METHOD_BUFFERED) /*POINT TO POINT */, ptun, 8,ptun, 8, out len, IntPtr.Zero);

ただし、まだ IP パケットを取得していないようです。相手側で tcpdump を実行したところ、「リンク層のカプセル化が間違っています」というメッセージが表示されました。

これは、TUN インターフェイスから IP パケットを取得しようとする正しい方法ですか?

4

1 に答える 1

5

いいえ、それは正しい方法ではありません。残念なことに、tap/tun ドライバーは Windows のタップモードでしか動作しません。これは、IP ではなく、イーサネット パケットを受信できることを意味します。宛先アドレス X の IP パケットがある状況を考えてみましょう。このパケットをイーサネット層で送信する前に、OS は ARP クエリを作成します。ねえ、IP X、あなたの MAC は何ですか? この場合、ARP レイヤーを実装する必要があります。ARP ネゴシエーションの後、システムはイーサネットでカプセル化された IP パケットを送信します。

于 2014-01-25T19:43:12.013 に答える