使用 libpcap 合并两个 pcap 文件

Merging two pcap files with libpcap

我已经知道如何读取 pcap 文件并获取数据包 have.B 但是如何将数据包写入新的 pcap 文件?我需要这个来将两个 pcap 文件合并为一个。

根据我的评论,libpcap/WinPcap 是一个库,而不是程序,因此要使用 libpcap/WinPcap 合并捕获文件,您必须编写自己的代码来进行合并,使用 libpcap/WinPcap 读取输入文件并写入输出文件。

您可以使用现有工具(例如 tracemerge 或 Wireshark 的 mergecap)来合并捕获。

假设目标是按时间戳合并两个文件的数据包,那么,如果您想编写自己的代码,您将:

  • 尝试打开这两个文件,打不开则失败;
  • 如果这两个文件有不同的 link-layer header 类型或快照长度,失败(你必须写一个 pcap-ng 文件来处理,并且 libpcap/WinPcap 尚不支持);
  • 如果文件具有相同的 link-layer header 类型和快照长度,使用 pcap_t 之一打开输出文件(哪一个无关紧要;所有pcap_t 的作用是告诉 pcap_dump_open() 使用什么 link-layer header 类型和快照长度);

并有一个循环,您可以:

  • 如果没有从第一个文件中读取数据包,并且第一个文件仍处于打开状态,则从中读取数据包 - 如果收到 EOF,则关闭第一个文件;
  • 如果没有从第二个文件中读取数据包,并且第二个文件仍处于打开状态,则从中读取数据包 - 如果收到 EOF,则关闭第二个文件;
  • 如果您有两个数据包,请写出时间戳较早的那个并将该数据包标记为不再存在,这样您就可以从它来自的文件中读取另一个数据包;
  • 如果你只有一个数据包,把它写出来并标记为不再存在,这样你就可以从它来自的文件中读取另一个数据包;
  • 如果你没有数据包,你就完成了 - 退出循环;

然后,当您退出循环时,关闭转储文件。到那时,你就完成了。

这可以使用 joincap 来完成。

go get -u github.com/assafmo/joincap

合并1.pcap2.pcap

joincap 1.pcap 2.pcap > merged.pcap

我写了 joincap 来克服我认为 mergecaptcpslice 错误处理的问题。
有关详细信息,请访问 https://github.com/assafmo/joincap