C++ 如何按内容正则表达式匹配筛选pcap(例如tcpdump)文件?

C++ 如何按内容正则表达式匹配筛选pcap(例如tcpdump)文件?,c++,python,pcap,packet-capture,tcpdump,C++,Python,Pcap,Packet Capture,Tcpdump,我用tcpdump收集了一些大型pcap(数据包捕获)文件。我想过滤掉包含特定字符串的数据包。我希望我的输出仍然是pcap格式。我发现了几种只显示与pcap文件中的正则表达式匹配的数据包的方法,但我需要的是过滤这些文件,而不是过滤掉数据包的显示(例如stdout)。输出需要是已删除匹配数据包的pcap文件 我怀疑dpkt(一个python模块)可能会有所帮助,但如果可能的话,我更愿意使用现有的(C/C++)工具。我会接受代码作为答案(也许一个带有基准测试的好dpkt示例会说服我也这么做;-) 提

我用tcpdump收集了一些大型pcap(数据包捕获)文件。我想过滤掉包含特定字符串的数据包。我希望我的输出仍然是pcap格式。我发现了几种只显示与pcap文件中的正则表达式匹配的数据包的方法,但我需要的是过滤这些文件,而不是过滤掉数据包的显示(例如stdout)。输出需要是已删除匹配数据包的pcap文件

我怀疑dpkt(一个python模块)可能会有所帮助,但如果可能的话,我更愿意使用现有的(C/C++)工具。我会接受代码作为答案(也许一个带有基准测试的好dpkt示例会说服我也这么做;-)

提前谢谢

回答:

根据尼姆的回答,这可以通过Wireshark/tshark实现。为了供其他人参考,这里有一个命令行示例,我在其中检查udp数据包中的字符串匹配(此示例可用于执行tcp或特定协议字段搜索):

再次感谢

这是一个很好的例子,说明了如何用C语言读取pcap文件,快速的谷歌搜索将揭示如何重新写入该文件


或者,AFAIK Wireshark可能已经允许您这样做了-即打开文件,应用过滤器并保存文件(快速运行Wireshark-显示它确实提供了这一功能)。

当然,如果您可以过滤掉显示,您可以将stdout重定向到一个文件?是的,但我的要求是输出为pcap,不是像打印在stdout上那样的数据包的字符串表示。是的!夏克是这样做的。谢谢你的指点。我正在更新这个问题,以便更好地设置命令行的格式。
tshark -r infile  -R 'not udp matches "my_search_string"' -w outfile