通过TCP连接拆分pcap文件的工具?

And*_*ner 18 linux command-line-interface tcp pcap

是否有工具可以为每个 TCP 连接将数据包捕获文件(以 pcap 格式)拆分为单独的文件?(除了可能需要在捕获过程中运行两次的本地 shell 脚本......)。类似于wireshark的“跟随TCP流”但对于命令行(我担心wireshark在显示700 MB数据包捕获时会消耗大量内存)

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

Thi*_*his 10

您可以使用tcpdump来提取所需的 pcap 部分……假设您正在一台主机上的 TCP/55777 和另一台主机上的 TCP/80 之间的套接字连接中查找数据包。您的源文件是bigfile.pcap,它是许多 HTTP 会话到相关网络主机的嗅探器转储...

tcpdump -r bigfile.pcap -w session.pcap -s0 tcp and port 55777
Run Code Online (Sandbox Code Playgroud)

这会将所有进出 TCP/55777 的数据包拉bigfile.pcap入并将它们复制到session.pcap.


sel*_*adb 10

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

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


小智 6

tcpflow 就是你想要的 - 每个 TCP 会话将 pcaps 拆分为一个文件

http://www.circlemud.org/jelson/software/tcpflow/

  • 正如问题中提到的,我试过了,但不明白为什么生成的输出文件比输入(pcap)文件大得多...... (3认同)
  • tcpflow 似乎也无法输出 pcap 文件。 (2认同)

sch*_*sch 5

有点矫枉过正,但使用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
Run Code Online (Sandbox Code Playgroud)

它生成名为 like 的文件1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(基于每个连接看到的第一个数据包)。