我同意在此网站上编辑.pcap文件有很多帖子。但是,我还没有能够找到一个可以根据特定条件有效删除条目的.pcap编辑器。
例如,假设我想在Time = 2秒后删除长度为172字节的所有数据包。有没有提供这种灵活性的工具?
如果没有,有没有办法可以使用C ++访问.pcap文件然后编辑它,并将其保存为.pcap文件?
答案 0 :(得分:1)
解决方案#1
最灵活的方法是为这种东西编写自己的代码。在使用专用库的大多数编程语言中,读取pcap文件非常简单。在C ++中,可以使用libpcap(参见this answer)
来完成解决方案#2
如果pcap文件不是太大,可以使用Wireshark。只需将文件加载到Wireshark,然后输入以下显示过滤器,然后输入Enter
:!(frame.time_relative > 2 && frame.len == 172)
。然后转到File
- > Export Specified Packets..
并选择displayed
,输入文件名,然后保存结果:
解决方案#3
如果文件大小很大但不是很大,或者您需要命令行解决方案,则可以使用Wireshark的命令行版本tshark。只需读入原始文件(-r
),应用相同的显示过滤器(-Y
),然后将生成的文件写入新位置(-w
):
类似的东西:
tshark -r input.pcap -Y "!(frame.time_relative > 2 && frame.len == 172)" -w output.pcap
解决方案#4
我建议的最后一个解决方案是使用libtrace(github here)。 但是,由于您需要同时过滤数据包属性和时间,因此它有点棘手。
一种方法是使用以下步骤:
首先使用tracesplit将pcap文件拆分为两个文件 - A.pcap和B.pcap,其中A.pcap将包含数据包,直到2秒标记,B将包含其余的跟踪
使用tracefilter过滤A.pcap,以便只保留长度不是172字节的数据包 - 过滤字符串为len != 172
使用tracemerge将已过滤的A.pcap和B.pcap合并为一个文件。