是否有工具可以将每个TCP连接的数据包捕获文件(以pcap格式)拆分为单独的文件?(而不是可能需要在捕获上运行两次的本地生成的Shell脚本...)。类似于wireshark的“跟随TCP流”,但用于命令行(恐怕wireshark在显示700 MB数据包捕获时会消耗大量内存)
我看了看tcpflow,但看起来它产生的文件比原始pcap文件大得多,而且似乎不是pcap格式。
是否有工具可以将每个TCP连接的数据包捕获文件(以pcap格式)拆分为单独的文件?(而不是可能需要在捕获上运行两次的本地生成的Shell脚本...)。类似于wireshark的“跟随TCP流”,但用于命令行(恐怕wireshark在显示700 MB数据包捕获时会消耗大量内存)
我看了看tcpflow,但看起来它产生的文件比原始pcap文件大得多,而且似乎不是pcap格式。
Answers:
您还可以使用PcapSplitter这是一部分PcapPlusPlus包。它完全满足您的需求(通过TCP或UDP连接拆分pcap文件),它是多平台的,并且对原始文件中的连接数量没有限制(因此您可以使用它来拆分大型文件)包含数千个甚至更多连接的pcap文件)。上面的链接用于源代码,但是如果您要编译的二进制文件- 这是我为多个平台制作的二进制文件的链接
编辑:显然已经发布了新版本的PcapPlusPlus,它包含适用于许多平台(Windows,Ubuntu 12.04 / 14.04,Mac OSX Mavericks / Yosemite / El Captian)的PcapSplitter二进制文件。我认为使用这些二进制文件比我之前提供的链接更好。你可以在这里找到
您可以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
。
-s0
有与时同时使用有什么影响-r
?
有点矫kill过正,但是使用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
它将生成名为like的文件1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap
(基于每个连接看到的第一个数据包)。
tcpflow是您想要的-每个TCP会话将pcaps分成一个文件
似乎有些工具可能有效(我个人没有使用过)
http://www.netresec.com/?page=SplitCap(基于Windows)
SplitCap是免费的(如在啤酒中)开源pcap文件拆分器。SplitCap根据TCP和UDP会话将一个大的pcap文件拆分为多个文件,每个会话一个pcap文件。SplitCap还可以用于将每个主机对的pcap文件拆分为一个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,为什么要这么做呢?