13

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

質問:しかし、私の質問は、サードパーティのアプリケーション/ドライバーをプリインストールする必要のないパケットをスニッフィングできるC#アプリケーションを使用できるようにするために何をする必要がありますか?

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

ありがとう

4

2 に答える 2

6

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

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パケットを読み取ることができます。

于 2010-08-15T07:07:38.603 に答える
6

標準のwinsocks実装のみを使用して、.NETで着信/発信パケットをキャプチャする方法があります。方法の例が記載されたブログを見たことがありますが、リンクがありません。

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

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

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

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

Windowsは、「セキュリティ上の理由」で非標準プロトコルへのアクセスをブロックするため、ネットワークでのRAWパケットの使用を実際にはサポートしていません(それを可能にするコードが存在する場合でも)。RAWパケットは常に、一般的な使用ではなく、新しいプロトコルの設計を調査することを目的としていました。

これらすべての理由から、通常は、Winpcapと特定の言語のラッパーを選択して、あらゆるタイプのキャプチャアプリケーションを実装することをお勧めします。

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

于 2010-11-10T23:19:13.137 に答える