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を使ってパケットキャプチャを実施していきます。