巨大なpcap/pcapngファイルの操作に困っていませんか? editcapがあなたの救世主になります!
はじめに:editcap とは? 🤔
ネットワークのトラブルシューティングや解析を行う際、tcpdump
や Wireshark GUI でパケットキャプチャを取得することは日常茶飯事ですよね。しかし、長時間キャプチャしたファイルはギガバイト単位になることも珍しくなく、そのまま Wireshark で開こうとすると、メモリ不足になったり、応答がなくなったりして困ることがあります。😭
そんな時に活躍するのが、Wireshark スイートに含まれるコマンドラインツール editcap
です!
editcap
は、その名の通りキャプチャファイル (pcap や pcapng 形式) を「編集」するための強力なツールです。GUI を使わずに、コマンドラインから様々な操作を行えるため、特に大きなファイルの扱いや、スクリプトによる自動処理に適しています。
editcap
の主な機能:
- 📁 キャプチャファイルの分割(パケット数や時間間隔)
- ⏰ 特定の時間範囲のパケット抽出
- 🔢 特定のパケット番号の抽出・除外
- 🗑️ 重複パケットの削除
- 📄 ファイル形式の変換 (pcap, pcapng, snoop など)
- ✂️ パケットのスナップ長(キャプチャサイズ)の変更
- 📝 パケットへのコメント追加
- ⏱️ タイムスタンプの調整
この記事では、editcap
の基本的な使い方から、便利なオプション、実践的なユースケースまで、徹底的に解説していきます。この記事を読めば、あなたも editcap
を使いこなし、巨大なキャプチャファイルも効率的に扱えるようになるはずです!🚀
editcap
は Wireshark をインストールすると通常一緒にインストールされます。Kali Linux にも標準で含まれています。
基本的な使い方 🛠️
editcap
の基本的なコマンド構文は非常にシンプルです。
editcap [オプション] <入力ファイル> <出力ファイル> [パケット番号 or 範囲 ...]
[オプション]
: 実行したい操作を指定します (後述)。<入力ファイル>
: 編集したい元のキャプチャファイル (例:capture.pcapng
)。-
を指定すると標準入力から読み込みます。<出力ファイル>
: 編集結果を保存するファイル名 (例:edited_capture.pcap
)。-
を指定すると標準出力へ書き出します。入力ファイルと同じ名前は指定できません。[パケット番号 or 範囲 ...]
: (オプション) 処理対象から除外したいパケット番号や範囲を指定します。スペース区切りで複数指定可能です (例:1 5 10-20
)。-r
オプションと組み合わせると、逆に指定したパケットのみを出力します。
簡単な例:ファイル形式の変換
最も簡単な例として、pcapng 形式のファイルを古い pcap 形式に変換してみましょう。
editcap -F pcap input.pcapng output.pcap
-F
オプションで出力ファイル形式を指定します。利用可能な形式は editcap -F
(オプション値なし) で確認できます。
主要なオプション解説 ⚙️
editcap
の真価は、その豊富なオプションにあります。ここでは、特によく使われる主要なオプションを詳しく見ていきましょう。
ユースケースと実践例 💡
理論を学んだところで、次は editcap
が実際にどのような場面で役立つのか、具体的なユースケースとコマンド例を見ていきましょう。
ケース1:巨大なキャプチャファイルを時間で分割する
シナリオ: 夜間に取得した 10GB のキャプチャファイル。そのまま開くのは困難なため、1時間ごとに分割したい。
# 3600 秒 (1時間) ごとにファイルを分割
editcap -i 3600 huge_capture.pcapng hourly_split.pcapng
➡️ これにより、hourly_split_00000_YYYYMMDDHHMMSS.pcapng
, hourly_split_00001_YYYYMMDDHHMMSS.pcapng
… といったファイルが生成され、特定の時間帯のファイルを個別に開いて解析できるようになります。
ケース2:サーバー障害発生前後の10分間のパケットだけを抽出する
シナリオ: サーバー障害が 2025年3月30日 15:30 頃に発生。原因調査のため、15:25 から 15:35 までのパケットを抽出したい。
editcap -A "2025-03-30 15:25:00" -B "2025-03-30 15:35:00" full_capture.pcapng incident_period.pcapng
➡️ 障害発生時間帯のパケットのみを含むファイルが得られ、効率的な解析が可能になります。
ケース3:重複パケットを削除して解析しやすくする
シナリオ: ミラーポートの設定ミスで、同じパケットが大量に重複してキャプチャされてしまった。これらを削除して、実際の通信量やシーケンスを正確に把握したい。
# 直近 4 パケットと比較して重複を削除
editcap -d duplicated_capture.pcapng cleaned_capture.pcapng
➡️ ノイズとなる重複パケットが除去され、よりクリーンなデータで解析を進められます。
ケース4:特定のツールで扱えるようにファイル形式を変換する
シナリオ: 最新の Wireshark で取得した pcapng ファイルを、古い pcap 形式しかサポートしていない解析ツールで読み込みたい。
editcap -F pcap input.pcapng output_legacy.pcap
➡️ 古いツールでも扱える形式に変換できます。逆に、古い pcap ファイルを pcapng に変換することも可能です (-F pcapng
)。
ケース5:ペイロードを除去してファイルサイズを削減する
シナリオ: プロトコルヘッダの解析が目的で、大容量のペイロードデータは不要。ファイルサイズを小さくして扱いやすくしたい。
# 各パケットを先頭 128 バイトに切り詰める (スナップ長を設定)
# 必要に応じて -L オプションでフレーム長も調整
editcap -s 128 -L full_capture.pcapng header_only.pcapng
➡️ ファイルサイズが大幅に削減され、転送や読み込みが高速になります。
ケース6:シェルスクリプトで大量のファイルを一括処理する
シナリオ: 複数のディレクトリに分割保存された大量の pcap ファイルから、特定の期間のデータだけを抽出して、別のディレクトリにまとめたい。
#!/bin/bash
INPUT_DIR="/path/to/raw_captures"
OUTPUT_DIR="/path/to/extracted_captures"
START_TIME="2025-03-30 09:00:00"
STOP_TIME="2025-03-30 17:00:00"
mkdir -p "$OUTPUT_DIR"
find "$INPUT_DIR" -name "*.pcap" -o -name "*.pcapng" | while read infile; do
filename=$(basename "$infile")
outfile="$OUTPUT_DIR/extracted_$filename"
echo "Processing $infile -> $outfile"
editcap -A "$START_TIME" -B "$STOP_TIME" "$infile" "$outfile"
done
echo "Extraction complete."
➡️ このようなスクリプトを使えば、手作業では大変な大量ファイルの処理も自動化できます。
注意点とヒント ⚠️💡
- オプションの組み合わせ: いくつかのオプションは互いに排他的 (例:
-c
と-i
) であったり、組み合わせると予期しない動作をする可能性 (例: 重複削除オプションと-r
,-t
,-S
) があります。man ページやヘルプ (editcap -h
) で確認しましょう。 - 大文字/小文字の区別: オプションは大文字と小文字が区別されます (例:
-v
は冗長表示、-V
はバージョン表示)。 - ファイル名: 入力ファイルと出力ファイルには異なる名前を指定する必要があります。
- 時刻指定:
-A
,-B
で時刻を指定する際は、キャプチャファイルのタイムスタンプのタイムゾーンに注意が必要です。capinfos -a -e <ファイル名>
で確認できます。Unixエポックタイムスタンプは常にUTC基準です。 - パフォーマンス: 巨大なファイルや複雑なオプション (特に
-D
や-w
で大きなウィンドウを指定した場合) を使用すると、処理に時間がかかり、大量のメモリを消費することがあります。 - エラーメッセージ: 何か問題が発生した場合、
editcap
はエラーメッセージを出力します。メッセージをよく読んで、原因を特定しましょう。-v
オプションで詳細な情報を得ることも有効です。 - pcap vs pcapng: pcapng はコメント機能や複数インターフェースのサポートなど、pcap よりも高機能です。可能であれば pcapng を使用し、互換性が必要な場合にのみ pcap に変換するのがおすすめです。ただし、pcapng のすべての情報を pcap に変換できるわけではありません。
- パケット内容の編集は不可:
editcap
はファイル構造やメタデータ、パケットの選択・削除・切り詰めなどは行えますが、パケット内部のデータ(IPアドレスやポート番号など)を直接書き換えることはできません。そのような編集にはtcprewrite
(tcpreplay スイートの一部) や Ostinato などのツールが必要です。
capinfos
でファイルの概要(期間、パケット数など)を確認し、次に editcap
で必要な部分を抽出し、最後に Wireshark GUI や tshark
で詳細な解析を行う、という流れが効率的です。
まとめ 🏁
editcap
は、一見地味ながらも、パケットキャプチャファイルの操作において非常に強力で便利なコマンドラインツールです。ファイル分割、時間抽出、重複削除、フォーマット変換など、日常的な解析作業を大幅に効率化してくれます。
特に、巨大なキャプチャファイルを扱う際には、GUIツールだけでは限界があるため、editcap
のような CUI ツールの活用が不可欠です。この記事で紹介したオプションやユースケースを参考に、ぜひ editcap
を日々の業務に取り入れてみてください。
最初はオプションが多くて戸惑うかもしれませんが、よく使う機能をいくつか覚えておくだけでも、作業効率は格段に向上するはずです。💪
参考情報
より詳細な情報については、以下の公式ドキュメント等を参照してください。
- Editcap Manual Page (Wireshark 公式): https://www.wireshark.org/docs/man-pages/editcap.html
- Kali Linux Tools – wireshark: https://www.kali.org/tools/wireshark/ (editcap を含む Wireshark スイートのツール紹介)
コメント