Introduction

キャプチャアプリケーションと銘打って、画像、動画、音声をキャプチャして、色々なフィルタを適用するアプリを個人的に作っています。
現在、テキストデータを連続するフィルタに通して加工する仕組みを考えています。

それと同時に、ネットワークを流れるパケットもキャプチャできたら面白いなぁ、って思っています。

パケットキャプチャを使う機会はそう多くは無いのですが、どれも重たいし、複雑すぎる印象があります。
代表的なのは

  • Wireshark
  • Fiddler
  • Microsoft Message Analyzer (旧Microsoft Network Monitor)

です。

そんなパケットキャプチャを.NETで使ってみようという趣旨です。

パケットキャプチャは大抵 WinPcap.dll というパケットキャプチャライブラリを使っています。
WinPcap.dllはLinuxの libpcap をWindowsに移植したものです。
WinPcap.dllは高水準APIであり、低水準APIである Packet.dll を使っています。
さらに、Packet.dllは Npf.sys というフィルタドライバを使います。Npfはきっと Network Packet Filter の略でしょう。

で、当然これらは C/C++ で記述されたネイティブライブラリなので、.NETから呼ぶのは、P/Invokeを定義し、使いやすいようにラップする必要があります。
幸い、.NETのラッパーが存在しています。

  • SharpPcap
  • Pcap.net

がある模様。
Pcap.net vs Sharppcapにて、この2つのどちらがよいか、という質問がありました。
Acceptedにはなっていないコメントですが、Pcap.netはC++/CLIが使われていて、パフォーマンスも考慮されているし、機能的にも優れている、とありました。
なので、次回からPcap.netを使います。

Preparation

先ほど話したとおり、パケットキャプチャはWinPcapを使っています。Microsoftのパケットキャプチャはそんなの使っていないでしょうが。
まずはWinPcapをインストールします。
なお、Windows 10と互換性のある Win10Pcap もありますが、今回は割愛。
なぜなら、Win10Pcapは GNUライセンス だから… ちなみに、WinPcapは BSDライセンス です。

WinPcapのインストール

公式ページからダウンロードします。最新版は4.1.3になります。
インストールはexeを実行するだけです。

Windows起動時にWinPcapを起動するかというチェックですが、そのままにしておきます。

以上で完了。

Conclusion

次回から、実際にPcap.netを使ってパケットキャプチャを実施していきます。