使用libpcap合并两个pcap文件

时间:2015-06-11 08:22:39

标签: pcap libpcap winpcap

我已经知道如何读取pcap文件并获取它拥有的数据包.Bout如何将数据包写入新的pcap文件?我需要将两个pcap文件合并为一个。

2 个答案:

答案 0 :(得分:1)

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

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

假设目标是合并两个文件'按时间戳分组,然后,如果你想编写自己的代码,你就是

  • 尝试打开这两个文件,如果你能
  • ,则会失败
  • 如果两个文件具有不同的链接层标题类型或快照长度,则失败(您必须编写一个pcap-ng文件来处理它,而libpcap / WinPcap还不支持) ;
  • 如果文件具有相同的链接层标题类型和快照长度,请使用pcap_t之一打开输出文件(它与哪一个无关;所有pcap_t告诉pcap_dump_open()使用什么链接层标题类型和快照长度;

并有一个循环:

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

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

答案 1 :(得分:0)

可以使用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