【Pyshark超入門】 PythonでWiresharkを使う方法まとめ

Pythonを用いてWireshark(T-Shark)を使うためのライブラリ「Pyshark」について、入門者向けにソースコード付きで解説します。

Pysharkとは

Pysharkは、PythonからWireshark(正確にはそのCLI版であるTShark)を操作して、パケットキャプチャしたり、取得したデータを解析できるライブラリです。主な用途は以下のとおりです。
ネットワークトラフィックのや自動処理に向いています。

  • パケットの自動分類・抽出
  • 特定条件のパケット検出(例:HTTPリクエスト、DNSクエリなど)
  • ネットワークトラフィックの可視化・統計分析
  • セキュリティログの自動処理

環境構築と基本操作

Pysharkの環境構築と基本操作について解説します。

環境構築

環境構築については以下ページで別途解説しています。

【Pyshark】環境構築・インストール方法
Pythonライブラリ「Pyshark」の環境構築・インストール方法を解説します。

pcapファイルの読み込み

import pyshark

cap = pyshark.FileCapture('sample.pcap')
print(cap[0])  # 最初のパケットを表示

フィルタ付き読み込み(Wiresharkのdisplay filterと同じ)

cap = pyshark.FileCapture('sample.pcap', display_filter='http')

リアルタイムキャプチャ(インターフェース指定)

cap = pyshark.LiveCapture(interface='eth0')
cap.sniff(timeout=10)  # 10秒間キャプチャ

パケットの構造とアクセス

packet = cap[0]
print(packet.highest_layer)  # 例: HTTP
print(packet.ip.src)         # 送信元IP
print(packet.tcp.dstport)    # 宛先ポート

レイヤー構造は packet.layers で確認できます。HTTPやTCPなどのプロトコルごとに属性が用意されています。

HTTPリクエストの抽出

for pkt in cap:
    if 'HTTP' in pkt:
        print(pkt.http.host, pkt.http.request_uri)
  • cap.close() を忘れずに。リソース解放が必要です。
  • decode_ascustom_parameters を使えば、より柔軟な解析が可能です。
  • HTTP/2のようにレイヤーが複数存在する場合は packet.layers[i] をループで探索するのが有効です。

関連ページ

【Wireshark超入門】パケットキャプチャの使い方
パケットキャプチャソフト「Wireshark」の使い方について入門者向けにまとめました。
【TShark超入門】パケットキャプチャの使い方
パケットキャプチャソフト「TShark」の使い方について入門者向けにまとめました。
この記事を書いた人
西住技研

Python使用歴10年以上。研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする