コンテンツにスキップ

Impacket sniffer.py

カテゴリ目次へ戻る / コマンド全体目次へ戻る

libpcap を使わず raw socket で IP パケットを受信し、Impacket のデコーダーで表示します。

項目内容
実装examples/sniffer.py
カテゴリパケット / ICMP / キャプチャ
規模80 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

この古い形式のサンプルは -h を解釈しないため、usage とトップレベルの sys.argv 処理を確認します。

python examples/sniffer.py [protocol ...]

protocol 名は socket.getprotobyname() で番号へ変換され、protocol ごとに raw IPv4 socket を一つ作ります。無指定時は icmp、tcp、udp が対象で、 未知の protocol 名は警告後に無視されます。

raw socket を作成し、select で到着を待ちます。受信 datagram を IP decoder へ渡して階層構造を表示し、loop を継続します。OS ごとに raw socket の protocol と受信 header の違いがあります。

このサンプルは 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 全体が停止します。

シンボル位置責務を追う入口
module-level entry1トップレベルで引数解析と処理を実行
モジュール使用する主な名前
impacketImpactDecoder
  • network probe または live packet capture を行います。送受信範囲、interface、filter と取得データの取扱いを確認してください。
  • 待受 socket または長時間 loop を開始します。bind address、port、停止方法、同時接続時の共有状態を確認してください。
  • raw socket または packet capture の権限が必要になる場合があります。取得データには第三者通信が含まれ得ます。
  • 停止要求、client 切断、partial read/write、worker 例外で listener 全体が不整合にならないことを確認します。

ImpactDecoder と標準 socket/select のみです。引数 parser や class は持たないため、機能を拡張する場合はまず interface、filter、終了条件を CLI として分離してください。通常は管理者権限が必要です。

  • 構文: python -m py_compile examples/sniffer.py
  • CLI: 引数なし/不足時の usage と終了 code を subprocess で確認する。
  • このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。