【问题标题】:Merging two pcap files with libpcap将两个 pcap 文件与 libpcap 合并
【发布时间】:2015-08-26 19:54:11
【问题描述】:

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

【问题讨论】:

    标签: pcap libpcap winpcap


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      • 尝试打开这两个文件,打不开失败;
      • 如果这两个文件具有不同的链路层标头类型或快照长度,则失败(您必须编写一个 pcap-ng 文件来处理该问题,而 libpcap/WinPcap 尚不支持);
      • 如果文件具有相同的链路层标头类型和快照长度,则使用pcap_ts 之一打开一个输出文件(不管是哪一个;所有pcap_t 所做的只是告诉pcap_dump_open()使用什么链路层标头类型和快照长度);

      并有一个循环,你:

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

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

      【讨论】:

      • 我试图简单地合并两个 .pcap 文件而不对数据包顺序进行排序。我遇到了一个问题,合并后的文件丢失了许多信息,包括源、目标、协议、长度等。
      • 我使用 pcap_loop 和 pcap_dump 来做到这一点,我应该使用任何其他函数来做到这一点,还是我只是以错误的方式使用它?我不能在这里粘贴我的代码,所以如果你能写一个关于如何使用 pcap_loop 和 pcap_dump 合并两个 pcap 文件的非常简单的例子,我会非常感激!
      • 好吧,如果您想将两组数据包合并到一个文件中,您必须以某种方式决定哪些数据包在结果文件中的位置。如果您关心数据包顺序,您可以从一个文件中读取所有数据包,例如使用pcap_loop(),然后使用pcap_dump() 将它们写入文件,然后使用pcap_loop() 从另一个文件中读取所有数据包,并使用pcap_dump() 将它们写入文件。我没有时间为您编写程序,所以您必须使用它来确定要编写的代码。
      • 我发现我在 'pcap_loop()' 中使用了错误的参数,现在通过我的代码合并任何两个 .pcap 文件没有任何问题,并且新文件不会丢失任何数据.非常感谢。
      • 嗨。要正确合并 *.pcap 文件,请使用 github.com/wkoroy/tcpmerge 实用程序
      猜你喜欢
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 2018-04-08
      • 2019-12-21
      • 1970-01-01
      相关资源
      最近更新 更多