WindowsマシンでのWiresharkパケットの受信および処理手順は何ですか?


20

Windowsコンピューターでのトラフィックの監視にWiresharkを使用しようとしています。それに取り組んでいる間、私はWiresharkWindowsが行う前にどのように低レベルのネットワークパケットをキャッチするかを疑問に思っていました。

まず、NICのネットワークインターフェイスがパケットを受信します。その後、NICはいくつかの初期チェック(CRC、正しいMACアドレスなど)を実行します。検証が成功したと仮定すると、NICはパケットを転送します。しかし、どのように、どこで?

ドライバーは、NICとOSまたは他のアプリケーションとの間の接着剤であると理解しています。さらに、WindowsWiresharkWinPcap?)用の個別のドライバーがあると思います。そうしないと、Wiresharkイーサネットフレームを受信できません。2つ以上のNICドライバーが同時に共存していますか?NICは、どのNICを使用するかをどのように知っていますか


あなたの前提は間違っています。NICは常にパケットをWindowsに(具体的にはデバイスドライバー、次にネットワークスタックに)渡します。それをどう処理するかはWindowsが決定します。Windowsには、プログラムがパケットのコピーを「通信中」に受信するように要求できる機能があり、おそらくフィルターを適用し、Wiresharkはその機能を使用します。WiresharkはWindowsをバイパスしませ
-zwol

(パケットをネットワークカードからアプリケーションに直接配信できるようにすることで、非常に高速なネットワークをより良くしようとする実験的なオペレーティングシステムがありますが、AFAIK Windowsはこれを行うことができません。少なくともNDISレイヤーを通過する必要があります。)
zwol

回答:


38

WindowsのI / Oモデルは、コンポーネントのスタックに基づいています。データは、物理ネットワークカードとデータを消費するアプリケーションの間に存在するスタックのさまざまなコンポーネントを経由する必要があります。これらのさまざまなコンポーネントは、スタックを流れるときにデータ(たとえば、TCPパケット)を検査し、そのパケットの内容に基づいて、データが変更されたり、パケットが完全に破棄されたりすることがあります。

ネットワークスタック

これは、パケットがアプリケーションからワイヤへ、またはその逆に到達するために通過する「ネットワークスタック」の単純化されたモデルです。

上のスクリーンショットに示されている最も興味深いコンポーネントの1つは、WFP(Windowsフィルタリングプラットフォーム)コールアウトAPIです。拡大すると、次のようになります。

Windowsフィルタリングプラットフォーム

開発者は、独自のモジュールをこのスタックの適切な場所に自由にプラグインできます。たとえば、ウイルス対策製品は通常、このモデルに接続してネットワークトラフィックを検査したり、ファイアウォール機能を提供したりする「フィルタードライバー」を使用します。Windows Firewallサービスも明らかにこのモデルに適合します。

Wiresharkなど、ネットワークトラフィックを記録するアプリケーションを作成する場合、適切な方法は、独自のドライバーを使用し、ネットワークパケットを検出できるようにできるだけ低くスタックに挿入することです。ファイアウォールモジュールがそれらを削除する前に。

そのため、このプロセスには多くの「ドライバー」が関与しています。多くの異なる種類のドライバーも。また、ハードディスクドライブの読み取りや書き込みなど、システム上の他の形式の入出力は、非常に類似したモデルに従います。

もう1つの注意事項-WFPコールアウトは、ネットワークスタックに身をゆだねる唯一の方法ではありません。例として、WinPCapはドライバーと直接NDISとインターフェイスします。つまり、フィルタリングが行われる前にトラフィックを傍受する可能性があります。

NDISドライバー

WinPCap

参照:

Vista +の次世代TCP / IPスタック

Windowsフィルタリングプラットフォームアーキテクチャ


3
優れた図。これらはmicrosoft.comのどこかに投稿されていますか?もしそうなら、私は周りを調べて、これらと一緒に利用可能な他の情報を確認したいと思います。
EEAA

1
完璧な答え。わかりやすく説明された、素晴らしい視覚化とソースが提供されています!どうもありがとうございます!
ハンシ

1
+ 1、WFPの上に構築されたオープンソースドライバーがあり、WinDivertと呼ばれるこのようなアプリケーションを作成するのは簡単です。また、そのための.NETラッパーも作成しました。

1
以前は、「レイヤードサービスプロバイダー」と呼ばれるものがありました-パケットを傍受して書き換えることができましたが、その機能に代わるものはありますか?「フィルタリング」APIの一部ですか?(ああ、気にしないでください:@TechnikEmpireのWinDivertリンクを見て、それが可能であることを確認しました。)
davidbak

1
@davidbakはい、WinDivertは一種のハイブリッドです。コールアウトドライバーAPIは、開発者が特定のドライバーを構築するためのもので、単純にパケットをドロップするだけではありません(ドライバーは不要です)。WinDivertはそのようなドライバーですが、汎用であり、パケットをカーネルお​​よびユーザーモードスペースに出し入れすることにより、パケットへのフルアクセスを提供します。

3

ライアンリースの答えは次のとおりです。

例として、WinPCapはドライバーと直接NDISとインターフェイスします。つまり、フィルタリングが行われる前にトラフィックを傍受する可能性があります。

そしてこれは、それがどのように動作するかのWinPcapのドキュメントの記述、です


これは、Ryanの回答の編集としてはより良かったでしょう。それ自体が答えではありません。
モニカとの軽さレース

2
実際、はい、それ彼の質問に対する答えです-ライアンの答えよりもそうです。問題は「Wiresharkがそれをどのように行うか」でした。Ryanの答えは、WinPcap(Wiresharkが使用するもの)使用しないメカニズムに関する多くの情報を提供するため、確かに興味深いものですが、元の質問には関係ありません。私が投稿したリンクは、WinPcapがそれをどのように行うかを説明しいます。これ元の質問に関連しています。

7
たぶん、サードパーティのリソースから関連する文章を引用して説明したなら。それ以外の場合、リンクのみの回答は回答ではありません。それがSEポリシーです。すべての答えは、文字通り、「リースの答えは、インターネット上のどこかにどのように動作するかの説明がある」され、このページに追加されます
モニカと明度レース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.