使用 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.pcap
和2.pcap
:
joincap 1.pcap 2.pcap > merged.pcap
我写了 joincap
来克服我认为 mergecap
和 tcpslice
错误处理的问题。
有关详细信息,请访问 https://github.com/assafmo/joincap。
我已经知道如何读取 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.pcap
和2.pcap
:
joincap 1.pcap 2.pcap > merged.pcap
我写了 joincap
来克服我认为 mergecap
和 tcpslice
错误处理的问题。
有关详细信息,请访问 https://github.com/assafmo/joincap。