如何有效地切片 PCAP 文件?

How to slice a PCAP file efficiently?

我正在尝试在 Ubuntu 中使用 tshark 对一个大的 PCAP 文件 (3 GB) 进行切片。 下面的代码是我想要做的:

tshark -r dia5_20Jan17.pcap -Y '((frame.time >= "2017-01-20 10:32:00") && (frame.time <= "2017-01-20 18:44:00"))'  -w 1.pcap

问题是内存RAM的浪费:

代码使用了 95/95% 的内存 (8GB)。有没有更好的切片 PCAP 文件的方法?我也试过Python...

tshark 不是这项工作的最佳工具。我对 libtrace (github link), which gives a nice toolbox for handling capture files. Specifically, in your case, the tracesplit 工具有很好的体验。

请注意,他们的大多数示例都使用名为 erf 的捕获格式,而不是 pcap。但是他们 support pcap 个文件,你只需要指定它。

等效的 tracesplit 命令类似于:

tracesplit --starttime=1484908320 --endtime=1484937840 -compress-type=none pcapfile:dia5_20Jan17.pcap pcapfile:1.pcap

您可以使用editcap 拆分捕获文件。例如:

editcap -A "2017-01-20 10:32:00" -B "2017-01-20 18:44:00" infile.pcap outfile.pcap

我刚才还没有尝试过,但我的猜测是内存占用主要是由 TCP 解析器跟踪连接等引起的。如果您创建一个配置文件,在其中禁用所有不需要的解析器(并且因为你过滤的框架元信息可能只是所有)你可能会节省大量内存。

我的做法是

  1. 启动 Wireshark
  2. 创建新配置文件
  3. 使用 "Analyze" -> "Enabled Protocols" -> "Disable All"
  4. 关闭 Wireshark
  5. 运行 tshark,用“-C”参数指定新的配置文件

正如我所说,我还没有针对您的情况对此进行测试,但在从 pcaps 雕刻数据包时,我经常使用简化的解剖设置。它速度更快,错误更少,并且可以节省 RAM。