Windows環境でパケットキャプチャするための環境について。
(Anacondaで)Python3系をインストールしていることは大前提です。そこから追加でインストールするものについて以下に示します。
私の環境は次の通りです。
・Win10 64bits
・Anaconda 3.5 conda update --all実行済み。
インストールするもの
WinPcap https://www.winpcap.org/
Wiresharkと一緒にインストールすれば楽。どうせWiresharkも使いますよね?登氏のWin10Pcapでもよいかも。http://www.win10pcap.org/ja/
winpcapy https://github.com/orweis/winpcapy
ちょっとかわいい感じの名前。pip install winpcapyでOK。なぜか、自分の環境ではうまくそのままでは動作しなかったので、__init__.py
のfrom winpcapy import WinPcap, WinPcapDevices, WinPcapUtils
を、from . import winpcapy
に書き換えました。ここらへん、なにがどうなっているのか、importの仕様を理解していないのでよくわかっていません。
とりあえず、とにかく、パケットキャプチャをWindowsでやろうとしたときに、Python3系だと、Winpcapyがよさそう。それ以外もいろいろ挑戦しましたがサンプルまで動いたのは、私の場合は、winpcapyだけでした。
importのところを変えているので、winpcapy.winpcapy.WinPcapDevices
みたいな感じになりますが、とりあえず動きます。
例を動かす前に
まずは、
>>> from winpcapy import WinPcapDevices
# Return a list of all the devices detected on the machine
>>> WinPcapDevices.list_devices()
でデバイス名を確認するとよいと思います。そうしないと、Ethernet、とか入れても例のプログラムが名前が違っていて、動かなかったりしますので。
scapy
winpcapyでキャプチャはできたのですが、解析しようとしたときに、どうやっていいのかわからなくなったので、高機能そうなscapyを入れることにしました。scapyの本家?は、Python2系にしか対応していないので、Python3に対応するように書き換えられた
scapy-python3 https://github.com/phaethon/scapy/
を利用します。
ただし、Win8以上では、__init__.py
のget_windows_if_list()
をちょっと書き換えないと動きません。これにハマりました。疲れた。scapyの概要は
ここ http://www.slideshare.net/takahoyo/scapy-53353876
を参照ください。
とりあえずは、以上です。