如何有效地基于TCP流拆分pcap文件?

时间:2018-07-10 09:08:53

标签: tcp wireshark pcap tshark

我正在尝试将包含数百个TCP流的大型pcap文件拆分为单独的文件。我目前的方法(见下文)对我来说似乎效率很低。我的问题是:通过TCP流将pcap文件拆分为单独文件的最有效方法是什么?

当前方法

在当前方法中,我首先使用tshark找出文件中包含哪些TCP流。接下来,对于每个这些TCP流,我读取原始文件并提取给定的流。下面的代码段显示了我的方法:

#!/bin/bash

# Get all TCP stream numbers
for stream in `tshark -r $file -T fields -e tcp.stream | sort -n | uniq`
do
    # Extract specified stream from $file and write it to a separate file.
    tshark -r "$file" -Y "tcp.stream eq $stream" -w "$file.$stream.pcap"
done

但是,这种方法似乎效率低下,因为tshark必须多次读取pcap文件(每个流一次)。理想情况下,我希望有一种方法可以遍历原始pcap文件,并在找到属于特定连接的数据包后将其附加到该文件。

其他方法

我也在寻找其他方法,但是它们似乎不适合我的情况:

  • PcapPlusPlus' PcapSplitter对TCP连接的定义稍有不同。他们将“连接”定义为相同的(协议,源ip,目标ip,源端口,目标端口)元组,如果多个TCP流具有相同的元组,这可能会显示奇怪的行为。我相信wireshark / tshark实际上将其TCP流基于SYN:SYN-ACK和FIN:FIN-ACK标志(但是如果我错了,请纠正我)。
  • Python's Scapy Scapy与PcapSplitter存在相同的问题,因为它没有提供任何将TCP流分离为上述5元组的方法。 (当然我可以自己写这个,但这超出了我当前的工作范围。)

对于这两种解决方案,我也不完全确定它们是否能够正确处理错误的捕获。

问题

因此,我想对如何以最有效的方式基于TCP流将pcap文件拆分为单独的文件提出一些建议。

2 个答案:

答案 0 :(得分:0)

您看过Tracewrangler吗?它适用于Windows,但是documentation确实提到它可以在wine下运行。

这可能是我能想到的最好的工具,但是您可能想看看Wireshark Wiki Tools页面上列出的其他工具。

答案 1 :(得分:0)

从性能的角度来看,一种有效的方法显然是针对该任务的专用程序。

libpcap-library可能具有实现以下功能所需的功能:

  • pcap_open_offline用于打开要读取的pcap文件
  • pcap_dump_open用于打开要写入的pcap文件
  • pcap_dump用于将数据包写入目标文件
  • 以及用于过滤/处理输入的函数。