Impacket sniffer.py
libpcap を使わず raw socket で IP パケットを受信し、Impacket のデコーダーで表示します。
| 項目 | 内容 |
|---|---|
| 実装 | examples/sniffer.py |
| カテゴリ | パケット / ICMP / キャプチャ |
| 規模 | 80 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”この古い形式のサンプルは -h を解釈しないため、usage とトップレベルの sys.argv 処理を確認します。
python examples/sniffer.py [protocol ...]protocol 名は socket.getprotobyname() で番号へ変換され、protocol ごとに
raw IPv4 socket を一つ作ります。無指定時は icmp、tcp、udp が対象で、
未知の protocol 名は警告後に無視されます。
詳細な処理フロー
Section titled “詳細な処理フロー”raw socket を作成し、select で到着を待ちます。受信 datagram を IP decoder へ渡して階層構造を表示し、loop を継続します。OS ごとに raw socket の protocol と受信 header の違いがあります。
仕組みの詳細
Section titled “仕組みの詳細”このサンプルは libpcap を使わず、protocol 番号ごとに IPv4 raw socket を一つ
開きます。引数の icmp、tcp、udp 等は getprotobyname() で IP protocol
number に変換され、IP_HDRINCL により受信 data に IPv4 header を含めます。
未知名は socket を作らず除外されます。
main loop は複数 socket を select へ渡し、ready になった socket から datagram
を読みます。すべて IPv4 header 付きという前提で IPDecoder を使い、protocol
field に応じて child decoder が packet hierarchy を作ります。socket ごとに
protocol を分けても、decode と表示の流れは共通です。
BPF filter、interface 選択、promiscuous mode、pcap timestamp はありません。 raw socket が渡す packet の範囲は OS ごとに異なり、管理者権限も必要です。 受信 length が短い packet や decode exception を一件ごとに隔離しないと、 一つの malformed packet で sniffer 全体が停止します。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
| module-level entry | 1 | トップレベルで引数解析と処理を実行 |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket | ImpactDecoder |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- network probe または live packet capture を行います。送受信範囲、interface、filter と取得データの取扱いを確認してください。
- 待受 socket または長時間 loop を開始します。bind address、port、停止方法、同時接続時の共有状態を確認してください。
- raw socket または packet capture の権限が必要になる場合があります。取得データには第三者通信が含まれ得ます。
失敗経路と後始末
Section titled “失敗経路と後始末”- 停止要求、client 切断、partial read/write、worker 例外で listener 全体が不整合にならないことを確認します。
実装を変更するとき
Section titled “実装を変更するとき”ImpactDecoder と標準 socket/select のみです。引数 parser や class は持たないため、機能を拡張する場合はまず interface、filter、終了条件を CLI として分離してください。通常は管理者権限が必要です。
- 構文:
python -m py_compile examples/sniffer.py - CLI: 引数なし/不足時の usage と終了 code を subprocess で確認する。
- このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。

