首页 文章

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

提问于
浏览
0

我试图将包含数百个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连接的定义略有不同 . 它们将'connection'定义为相同(协议,源IP,目标IP,源端口,目标端口)-tuple,如果多个TCP流具有相同的元组,则可能会显示奇怪的行为 . 我相信wireshark / tshark实际上将他们的TCP流基于SYN:SYN-ACK和FIN:FIN-ACK标志(但如果我错了请纠正我) .

  • Python's Scapy Scapy与PcapSplitter具有相同的问题,因为除了上面描述的5元组之外,它没有提供任何分割TCP流的方法 . (当然我可以自己写这个,但这超出了我目前工作的范围) .

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

问题

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

1 回答

  • 0

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

    这可能是我能想到的最好的工具,但你可能想看看Wireshark wiki Tools页面上列出的其他一些工具 .

相关问题