A certain engineer "COMPLEX"

.NETでパケットキャプチャを試してみる SharpPcap編 第1回

前回はPcap.Netでキャプチャを実施しました。

Introduction


今回はSharpPcapを使います。ライセンスはLGPLです。

sharppcap - Fully managed, cross platform (Windows, Mac, Linux) .NET library for capturing packets

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 のみです。

Pcap.Netと異なり、DestnationやSourceを取得する際に、型のキャストが必要になるのが面倒かな。
パケットはデータリンク層かもしれないので、アドレスがない可能性があるのはわかりますが。
フィルタの構文はPcap.Netと同じです。
これは、WinPcapを使っているためです。

テスト


実際に実行してみます。
お好きなキャプチャデバイスを選択してStart Captureを押下することでキャプチャが実行されます。
HTTPのみ許容しているので、Webブラウザでどこかにアクセスしてみてください。
前回と全く同じです。

Conclusion


今回も簡単にキャプチャできました。
基本的にWinPcapのラッパーなので、似た使い方になるので、移植も簡単でしたね。

Source Code

https://github.com/takuya-takeuchi/Demo/tree/master/WPF.SharpPcap1

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。