コンテンツにスキップ

Impacket split.py

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

pcap ファイルを読み、IPv4 の TCP 通信を送信元・宛先ごとに別のファイルへ分けます。

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

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

python examples/split.py <capture.pcap>

先頭の positional だけを入力 pcap として使用します。出力先 option はなく、 現在の作業ディレクトリへ <src-ip>.<src-port>-<dst-ip>.<dst-port>.pcap の名前で接続別ファイルを 作成します。

pcapy.open_offline() で capture を順に読み、datalink type に対応する decoder で TCP/IP を抽出します。source/destination の endpoint pair から方向付きの文字列 key と file 名を作り、同じ方向の完全な capture record を一つの pcap へ追記します。

split は TCP byte stream を復元する tool ではなく、pcap 内の packet を connection key ごとに別 pcap へ振り分けます。input handle に ip proto \tcp の BPF filter を設定し、Ethernet/Linux SLL decoder から IPv4 と TCP header を取り出します。non-IPv4 や非TCP packet は filter 段階で除外されます。

connection key は source (IP,port) と destination (IP,port) をこの順番で 連結した文字列です。Connection class には両方向を同一視する意図の __cmp__() がありますが、実際の dictionary key には Connection object ではなく方向付き文字列を使っています。そのため、現在の Python 3 実装では 往路と復路は別ファイルになります。新規 key では endpoint 順の file 名で pcapdumper を開き、元の capture header と packet 全体をそのまま書き込みます。

sequence number の並べ替え、再送除去、IP fragment/TCP segment reassembly、 session timeout による同一 4-tuple の世代分離は行いません。したがって出力は 「capture に現れた一方向の packet の集合」であり、application payload file ではありません。双方向を一つへ統合する変更では、順序に依存しない key を明示的に 作る必要があります。大量 flow では開いた dumper 数が増えるため、handle close と resource 上限も改善時の論点です。

シンボル位置責務を追う入口
Connection35__init__()、getFilename()
Decoder69__init__()、start()、packetHandler()
main()127モジュール関数
モジュール使用する主な名前
impacketversion
impacket.ImpactDecoderEthDecoder, LinuxSLLDecoder
import 名配布パッケージ経路・宣言状態
pcapypcapy直接 import、直接依存には未宣言
  • 主処理はローカルファイルの解析です。入力を信頼せず、offset、length、形式識別子を検証してからデータを参照してください。
  • オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
  • 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。

pcapy、EthDecoder / LinuxSLLDecoder に依存します。pcapy は直接依存に宣言されていません。Decoder.packetHandler() は TCP stream 再構成器ではなく方向付き flow 単位の packet 振り分けなので、再送、欠落、out-of-order を解決するものではありません。

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