Impacket split.py
pcap ファイルを読み、IPv4 の TCP 通信を送信元・宛先ごとに別のファイルへ分けます。
| 項目 | 内容 |
|---|---|
| 実装 | examples/split.py |
| カテゴリ | パケット / ICMP / キャプチャ |
| 規模 | 147 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”この古い形式のサンプルは -h を解釈しないため、usage とトップレベルの sys.argv 処理を確認します。
python examples/split.py <capture.pcap>先頭の positional だけを入力 pcap として使用します。出力先 option はなく、
現在の作業ディレクトリへ
<src-ip>.<src-port>-<dst-ip>.<dst-port>.pcap の名前で接続別ファイルを
作成します。
詳細な処理フロー
Section titled “詳細な処理フロー”pcapy.open_offline() で capture を順に読み、datalink type に対応する decoder で TCP/IP を抽出します。source/destination の endpoint pair から方向付きの文字列 key と file 名を作り、同じ方向の完全な capture record を一つの pcap へ追記します。
仕組みの詳細
Section titled “仕組みの詳細”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 上限も改善時の論点です。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
Connection | 35 | __init__()、getFilename() |
Decoder | 69 | __init__()、start()、packetHandler() |
main() | 127 | モジュール関数 |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket | version |
impacket.ImpactDecoder | EthDecoder, LinuxSLLDecoder |
外部パッケージ(直接使用)
Section titled “外部パッケージ(直接使用)”| import 名 | 配布パッケージ | 経路・宣言状態 |
|---|---|---|
pcapy | pcapy | 直接 import、直接依存には未宣言 |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 主処理はローカルファイルの解析です。入力を信頼せず、offset、length、形式識別子を検証してからデータを参照してください。
- オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
失敗経路と後始末
Section titled “失敗経路と後始末”- 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。
実装を変更するとき
Section titled “実装を変更するとき”pcapy、EthDecoder / LinuxSLLDecoder に依存します。pcapy は直接依存に宣言されていません。Decoder.packetHandler() は TCP stream 再構成器ではなく方向付き flow 単位の packet 振り分けなので、再送、欠落、out-of-order を解決するものではありません。
- 構文:
python -m py_compile examples/split.py - CLI: 引数なし/不足時の usage と終了 code を subprocess で確認する。
- このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。

