前回はPcap.Netでキャプチャを実施しました。
Introduction
今回はSharpPcapを使います。ライセンスはLGPLです。
Nugetにパッケージはありますが、またも公式では無い様子。
githubに公式ページがありますが、Nugetについて言及が無いので、野良配布でしょう。
なので、githubのリリースページから最新版を入手します。
2017年3月末時点で4.2.0が最新版です。
Pcap.Netとは異なり、バイナリにx86版とx64版はありません。
- SharpPcap.dll
- PacketDotNet.dll
なので、前回と違って気にすることは少ないです。
また、SharpPcapはPacket.Netというライブラリに依存しています。こちらもLGPLです。
今回のソースは下記になります
Source
前回と同じ、Xamlです。
また、前回はinterfaceを駆使しているため、編集するソースは1ファイルだけになります。
実装をinterfaceで分離したかいがありました。
SharpPcapのライブラリは、sln ファイルと同じ階層にあるlibフォルダに、下記のように配置してください。
- lib\SharpPcap-4.2.0\Release\SharpPcap.dll
- lib\SharpPcap-4.2.0\Release\PacketDotNet.dll
PacketCaptureService
前回のソースを基準にしますので、interfaceは一切変更しません。
Pcap.NetのクラスをSharpPcapのクラスに置換したりするだけです。
修正ファイルは、PacketCaptureService.cs のみです。
1 | using System; |
Pcap.Netと異なり、DestnationやSourceを取得する際に、型のキャストが必要になるのが面倒かな。
パケットはデータリンク層かもしれないので、アドレスがない可能性があるのはわかりますが。
フィルタの構文はPcap.Netと同じです。
これは、WinPcapを使っているためです。
テスト
実際に実行してみます。
お好きなキャプチャデバイスを選択してStart Captureを押下することでキャプチャが実行されます。
HTTPのみ許容しているので、Webブラウザでどこかにアクセスしてみてください。
前回と全く同じです。
Conclusion
今回も簡単にキャプチャできました。
基本的にWinPcapのラッパーなので、似た使い方になるので、移植も簡単でしたね。
Source Code
https://github.com/takuya-takeuchi/Demo/tree/master/WPF/07_WPF.SharpPcap1