C# で簡単なネットワーク セキュリティ プログラムを作成しています。ネットワーク内のトラフィックをキャプチャするために、すべてのパケットをキャプチャして UI に詳細を表示できるsharppcap ライブラリを使用します。ただし、ライブラリには、ポート、送信元、宛先、またはデータ コンテンツの対象となるパケットをドロップするために使用できるメソッドが見つかりません。Sharppcap はそのような機能をサポートしていますか? そうでない場合、使用できるライブラリはありますか?
1 に答える
Sharppcap ライブラリは、パケットの傍受と送信のための共通 API を提供するだけです。Windows では、おそらく、sharppcap で WinPcap を使用しているでしょう。Windows では、Windows パケット フィルタリング プラットフォーム用の特別な種類のドライバーを作成しない限り、パケットを検査および変更することはできません。これは、C++ または C を使用する必要があることも意味します。
WinPcap は、ネットワーク カードに到着するパケットの読み取りをサポートし、ネットワーク カードからの生データの送信もサポートします。これには、デバッグ、セキュリティ調査、またはネットワークをプローブするためのツールの開発のためのカスタム パケットの送信機能などが含まれます。
簡単に言えば、sharppcap はこれをサポートしていないため、独自のドライバーを作成する必要があります。Windows から離れて、Debian や Arch Linux などの Linux ディストリビューションを使用している場合は、C で記述されたカスタム インターセプターを使用して専用のハードウェア ファイアウォールを 1 日以内にセットアップできます。
Windows を使い続けることに決めた場合、負荷がネットワーク カードの能力の 50% 近くになると、厄介な驚きに直面することになります。Windows は、パフォーマンスを向上させるために、大きな負荷がかかるとネットワーク フィルタリング スタックへの転送を停止します。約 200 mbit/sec 未満のギガビット ネットワーク カードでは、WinPcap が全パケットの 5% すら認識していないことに気付きました。これをテストするために、スイッチとテスト対象のマシンの間にある専用のキャプチャ デバイスを使用しました。キャプチャ デバイスは回線速度でキャプチャでき、リモート マシンも同様にキャプチャできますが、Windows のネットワーク フィルタリング スタックはできません。