通过TCP连接分割pcap文件的工具?[关闭]


16

是否有工具可以将每个TCP连接的数据包捕获文件(以pcap格式)拆分为单独的文件?(而不是可能需要在捕获上运行两次的本地生成的Shell脚本...)。类似于wireshark的“跟随TCP流”,但用于命令行(恐怕wireshark在显示700 MB数据包捕获时会消耗大量内存)

我看了看tcpflow,但看起来它产生的文件比原始pcap文件大得多,而且似乎不是pcap格式。


tcpflow生成的文件不是pcaps,它们是tcp流的实际tcp有效负载。
克里斯

Answers:


9

您还可以使用PcapSplitter这是一部分PcapPlusPlus包。它完全满足您的需求(通过TCP或UDP连接拆分pcap文件),它是多平台的,并且对原始文件中的连接数量没有限制(因此您可以使用它来拆分大型文件)包含数千个甚至更多连接的pcap文件)。上面的链接用于源代码,但是如果您要编译的二进制文件- 是我为多个平台制作的二进制文件的链接

编辑:显然已经发布了新版本的PcapPlusPlus,它包含适用于许多平台(Windows,Ubuntu 12.04 / 14.04,Mac OSX Mavericks / Yosemite / El Captian)的PcapSplitter二进制文件。我认为使用这些二进制文件比我之前提供的链接更好。你可以在这里找到


10

您可以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
kasperd '16

4

有点矫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(基于每个连接看到的第一个数据包)。



2

似乎有些工具可能有效(我个人没有使用过)

http://www.netresec.com/?page=SplitCap(基于Windows)

SplitCap是免费的(如在啤酒中)开源pcap文件拆分器。SplitCap根据TCP和UDP会话将一个大的pcap文件拆分为多个文件,每个会话一个pcap文件。SplitCap还可以用于将每个主机对的pcap文件拆分为一个pcap文件,而不是会话。


1

受@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,为什么要这么做呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.