はじめに
WiresharkでキャプチャしたデータをPythonで使いたい。
そんなあなたに「pyshark」。
結構探しても出てこなかったのでまとめておきます。
インストール
インストールはこれだけ
コンソール
$ pip install pyshark
使ってみる
Wiresharkで保存したデータを読み込んで一つ目のパケットを覗いてみる。
main.py
import pyshark
capture = pyshark.FileCapture("Wiresharkで保存したファイル.pcapng")
print(capture[0])
上記のコードを実行すると、
Layer ETH:
Destination: 00:00:00:00:00:00:00
Address: 00:00:00:00:00:00
...
Layer IP:
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
...
Layer TCP:
Source Port: ~~~
Destination Port: ~~~
...
パケットの情報がいろいろ表示される。
print(capture[0].layers)
でレイヤーの種類が見れる。
フィルターを使う
引数にdisplay_filterを追加する
capture = pyshark.FileCapture("Wiresharkで保存したファイル.pcapng",
display_filter='ip.src == xxx.xxx.xxx.xx')
暗号化されたデータを復号化する
wiresharkで復号化したときのSSLKEYLOGFILEを引数に使う。
capture = pyshark.FileCapture("Wiresharkで保存したファイル.pcapng",
override_prefs={'tls.keylog_file':"SSLKEYLOGFILEに保存したファイル")})
リアルタイム処理したいときは
リアルタイム処理したいときはLiveCaptureを使う。
capture = pyshark.LiveCapture ('イーサネット', bpf_filter='フィルター')
※注意:pythonコードを実行する前にSSLKEYLOGFILEを更新しないとうまくいかない。
うまくいかない場合は
引数のdebugをオンにして頑張る。
裏ではtsharkが動いているのでtsharkの実行コードなどが覗ける。
capture = pyshark.FileCapture("Wiresharkで保存したファイル.pcapng",
display_filter='ip.src == xxx.xxx.xxx.xx',
override_prefs={'tls.keylog_file':"SSLKEYLOGFILEに保存したファイル")},
debug=True)
参考文献