質問

バックグラウンド: :私は今、アプリケーションが実行されているPCのネットワークカードに出入りするパケットを監視できるC#アプリケーションの書き方を理解しました。私が知っているアプローチに依存しています http://www.winpcap.org/ ただし、すでにPCにインストールされていて、次にC#ラッパーを使用します。 http://pcapdotnet.codeplex.com/ また http://sourceforge.net/projects/sharppcap/ .

質問: :私の質問ですが、サードパーティのアプリケーション/ドライバーをプリインストールする必要のないパケットを嗅ぐことができるC#アプリケーションを持つことができるようにするには、何をする必要がありますか?

説明: :それは私が現在持っているアプリケーションが本当に欲しいですが、アプリケーションを使用する前にXYZをダウンロード/インストールする必要があるようにユーザーに指示する必要はありません。質問の目的のために、サードパーティのアプリケーション/ドライバーのダウンロードとインストールを自動化することも許可されていないことを想定しています。 (WinpCapを使用すると、バンドルできるかどうかはわかりませんが、残念ながらあなたはいかなる場合でも想定されていないと思います)

ありがとう

役に立ちましたか?

解決

個人的にはwinpcapに固執します。しかし、あなたが尋ねたので、次のコードを使用して生のソケットを有効にするためにネットワークからパケットをスニッフィングすることができます。

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
s.Bind(new IPEndPoint(IPAddress.Parse("<IP Address Here of NIC to sniff>"), 0));
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
byte[] inBytes = new byte[] { 1, 0, 0, 0 };
byte[] outBytes = new byte[] { 0, 0, 0, 0 };
s.IOControl(IOControlCode.ReceiveAll, inBytes, outBytes);

これが完了したら、使用できます Socket.Receive また Socket.BeginReceive 生のIPパケットを読む。

他のヒント

標準のWinsocks実装のみを使用して、.NETで着信/発信パケットをキャプチャする方法があります。どのように例を挙げたブログを見てきましたが、私はもうリンクを持っていません。

簡単に言えば、それは極端なエッジケースです。なぜなら、それはWinSocks(標準のWindowsネットワークドライバー)が意図していたものではないからです。

PCAPが通常、パケットをキャプチャするために必要な理由は、NICの完全な機能を解き放つ独自のNDISネットワーキングドライバーを使用しています。それに加えて、指定されたインターフェイスでキャプチャされるパケットの量を制限するためにフィルターを設定する簡単な方法も提供します。

つまり、ドライバーは、ユーザーモードレベルではなく、カーネルレベルで特定のタイプのパケットを無視します。したがって、パケットをより効率的にフィルタリングし、ネットワーク上のより大きな負荷でキャプチャできるようになります。

.NETでは、パケットをフィルタリングするには、はるかに効率が低下する独自のアプリケーションレイヤーパケットフィルタリングスキームを提供する必要があります。

Windowsは、「セキュリティ上の理由」で非標準プロトコルへのアクセスをブロックするため、ネットワーキングにRAWパケットの使用を実際にサポートしていません(コードが存在する可能性がありますが)。生のパケットは、一般的な使用ではなく、新しいプロトコルの設計を研究するための常に意図されていました。

これらすべての理由で、通常、WinpCapと特定の言語のラッパーを、あらゆる種類のキャプチャアプリケーションを実装することをお勧めします。

注:私は個人的にSharppcapを好みますが、プロジェクトの開発を行っているときにも偏見があります。 PCAP.NETは、キャプチャに関して実装が非常に似ており、パケットの解析方法に関しては主に分岐します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top