Windowsコンピュータのトラフィック監視にWiresharkを使用しようとしています。それに取り組んでいる間、Windowsが実行する前に、Wiresharkが低レベルのネットワークパケットをどのようにキャッチするかを考えていました。
まず、私のNIC上のネットワークインターフェイスがパケットを受信します。NICは、いくつかの初期チェックを行います(CRC、正しいMACアドレスなど)。 。。)検証が成功したとすると、NIC=はパケットを転送します。しかし、どのように、どこで?
ドライバーはNICとOSまたは他のアプリケーションの間の接着剤であると理解しています。さらにWindowsとWiresharkには別のドライバーがあると思います(WinPcap?)そうでない場合、WiresharkはEthernetフレームを受信できません。2つ以上ありますNICドライバーが同時に共存していますか?NICはどのドライバーを使用すべきかをどのようにして知るのですか?
WindowsのI/Oモデルは、コンポーネントのスタックに基づいています。データは、物理ネットワークカードとデータを消費するアプリケーションとの間に存在するスタックのさまざまなコンポーネントを通過する必要があります。時々、これらのさまざまなコンポーネントは、スタックを通過するときにデータ(TCPパケットなど))を検査し、そのパケットの内容に基づいて、データが変更されたり、パケットが完全に破棄されます。
これは、アプリケーションからワイヤへ、またはその逆にパケットが流れる「ネットワークスタック」の簡略化されたモデルです。
上のスクリーンショットに示されている最も興味深いコンポーネントの1つは、WFP(Windows Filtering Platform)Callout APIです。これを拡大すると、次のようになります。
開発者は、自分のモジュールをこのスタックの適切な場所に自由に接続できます。たとえば、ウイルス対策製品は通常、このモデルにプラグインしてネットワークトラフィックを検査するか、ファイアウォール機能を提供する「フィルタードライバー」を使用します。 Windowsファイアウォールサービスも明らかにこのモデルに適合します。
Wiresharkなどのネットワークトラフィックを記録するアプリケーションを作成する場合、適切な方法は、独自のドライバーを使用し、ネットワークパケットを検出できるようにできるだけ低いスタックに挿入することです。あなたのファイアウォールモジュールがそれらを落とす機会がある前に。
したがって、このプロセスには多くの「ドライバー」が関わっています。多くの異なるタイプのドライバーも。また、ハードディスクドライブの読み取りや書き込みなど、システム上の他の形式の入出力は、非常によく似たモデルに従います。
もう1つの注意点-WFP=コールアウトは、ネットワークスタックに自分を呼び込む唯一の方法ではありません。WinPCapは、例として、ドライバーと直接NDISとインターフェイスします。つまり、前にトラフィックをインターセプトする機会があります。フィルタリングがまったく行われていません。
参照:
ライアン・リースの答えが言うように:
例としてWinPCapは、NDISと直接ドライバーとインターフェイスします。つまり、フィルタリングがまったく行われる前にトラフィックを傍受する可能性があります。