パケットキャプチャファイル(pcap形式)をTCP接続ごとに別々のファイルに分割するツールはありますか?(おそらく、キャプチャ上で2回実行する必要がある自家製のシェルスクリプト以外)。 。)。wiresharkの 'follow TCP stream'のようなものですが、コマンドライン用です(wiresharkは700 MBのパケットキャプチャを表示するときに大量のメモリを消費すると思います)。
私は tcpflow を調べましたが、元のpcapファイルよりもはるかに大きいファイルを生成しているようで、それらはpcap形式ではないようです。
PcapPlusPlus パッケージの一部である PcapSplitter を使用することもできます。それはあなたが必要とするものを正確に行います(これはTCPまたはUDP接続によってpcapファイルを分割しています)、それはマルチプラットフォームであり、元のファイルの接続数に制限はありません(数千以上の接続を含む大きなpcapファイルを分割するために使用できます。上記のリンクはソースコード用ですが、コンパイル済みのバイナリが必要な場合は here はバイナリ用のリンクです私はいくつかのプラットフォーム用に作りました
EDIT:どうやらPcapPlusPlusの新しいバージョンがリリースされ、かなり多くのプラットフォーム(Windows、Ubuntu 12.04/14.04、Mac OSX Mavericks)のPcapSplitterバイナリが含まれています/ Yosemite/El Captian)。以前に提供したリンクよりもこれらのバイナリを使用する方が良いと思います。あなたはそれを見つけることができます ここ
tcpdump
を使用して、必要なpcapの部分を抽出できます...あるホストのTCP/55777と別のホストのTCP/80の間のソケット接続でパケットを探しているとします。ソースファイルはbigfile.pcap
です。これは、問題のWebホストへの多数のHTTPセッションのスニファダンプです...
tcpdump -r bigfile.pcap -w session.pcap -s0 tcp and port 55777
これにより、TCP/55777との間で送受信されるすべてのパケットがbigfile.pcap
にプルされ、session.pcap
にコピーされます。
少しやりすぎですが、tshark
(wireshark
に同梱)を使用すると、zsh
で実行できます。
file=file.pcap
tshark -Tfields -e tcp.stream \
-e frame.time_Epoch \
-e ip.src \
-e tcp.srcport \
-e ip.dst \
-e tcp.dstport -r $file |
sort -snu |
while read -A f; do
tshark -r $file -2R "tcp.stream == $f[1]" -w ${(j:-:)f[2,-1]}.pcap
done
これは、1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap
のような名前のファイルを生成します(各接続で最初に見られたパケットに基づく)。
tcpflowはあなたが欲しいものです-pcapをTCPセッションごとに1つのファイルに分割します
うまくいくかもしれないこのツールがあるようです(私は個人的には使用していません)
http://www.netresec.com/?page=SplitCap (Windowsベース)
SplitCapは無料の(ビールのように)オープンソースのpcapファイルスプリッターです。 SplitCapは、TCPおよびUDPセッション、セッションごとに1つのpcapファイルに基づいて、1つの大きなpcapファイルを複数のファイルに分割します。代わりに、SplitCapを使用して、ホストペアごとにpcapファイルを1つのpcapファイルに分割することもできます。セッションの。
@schに触発されたものはbashバージョンです。
file=cap.pcap
$tshark -Tfields -e tcp.stream \
-e frame.time_Epoch \
-e ip.src \
-e tcp.srcport \
-e ip.dst \
-e tcp.dstport -r $file |
sort -snu |
while read -a f; do
[[ "${f[5]}" ]] || continue # sometimes there is no stream number ex. UDP
fileout=$(echo ${f[0]}__${f[1]}__${f[2]}__${f[3]}__${f[4]}__${f[5]} | tr -d '\r' )
$tshark -r $file -2R "tcp.stream == ${f[0]}" -w "$fileout.pcap"
done
read
ファイル名は次のようになります:stream number__time__source IP__port__destination IP__port.pcap
tr -d '\r'
はWindowsユーザー向けです。WindowsのtsharkはCR LFを出力するためです。
編集:
tsharkを使用したこのソリューションは非常に低速ですが確実です。 SplitCapは超高速ですが、パケットにエラーがあるとクラッシュしますが、tsharkはエラーについてのみ通知しますが、続行します。
tshark: The file "cap.pcap" appears to have been cut short in the middle of a packet.
最後に、超高速のPcapSplitterもありますが、Winpcapドライバーが必要です。Windowsのnpcapドライバーでは動作しません。
しかし、SplitCapには解決策があります。 pcapfix を使用すると、破損したパケットを修正できるため、SplitCapが再びクラッシュすることはありません。 tsharkは分割が非常に遅いため、これは私が現在使用しているものです。
そして、私が行ったPcapSplitterの解決策は、任意の方法を使用してwinpcap dllを注入することでしたが、SplitCapがあるのになぜそれを行うのですか?