怎么样快速解析好几个 G 的 pcap 文件

196 天前
 ChristopherY
目前知道的 Python 库有 scapy ,dpkt 等

scapy 能解析出来的字段比较多,但是速度很慢,大概每秒 1000 个包左右。

dpkt 比较快,每秒可以达到几十万个包。但是解析出来的字段比较少,需要自己手动解字段。



请问各位大佬,有没有相关的工具或者优化方法能快速解析 pcap 文件?
2744 次点击
所在节点    程序员
31 条回复
patrickyoung
196 天前
tshark 或者 zed datalake
patrickyoung
196 天前
还有 packetbeat
ChristopherY
196 天前
@patrickyoung 最主要的还是想 Python 自己写函数去分析某个 pcap 文件,比如根据 src 、dst 、协议类型、mpdu id 或者 length 来筛选,然后进一步分析 pcap 文件。tshark 读取速度好像也一般,有没有最佳实践
Rehtt
196 天前
有没有可能因为解析的字段比较少所以速度就快
keakon
196 天前
不要用 Python 干这种事啊,换成 C 、Go 之类的去做,轻松快几个数量级。
ChristopherY
196 天前
@keakon 确实,想追求速度还得是 c 或 go
ChristopherY
196 天前
@Rehtt 是这样的,所以追求速度还是得用别的语言了
qazwsxkevin
196 天前
不知道要研究这份东西多久,如果经常发生,周期长,复盘次数多,不如写个脚本导入 mysql 吧,
记得以前看文档,pcap 有工具可以转 json ,然后想办法再进 mysql 试试,
在数据库表里里 fliter 东西,出结果范围快得不要不要的...
要不就如 5 楼所说,c++撸一个
QuinceyWu
196 天前
我最近也在做类似的事情:使用 scapy 实时解析 udp 的报文,udp 报文会分片,所以我起了一个线程和队列去做接收和解析的逻辑
lysShub
196 天前
解析出来的字段是啥意思? pcap 里面存的不就是原始的 eth 数据包吗,好像还附带有 ts ,if 几个信息
ChristopherY
196 天前
@lysShub 就是根据帧的格式,把原始数据解析成对应的字段信息。
ChristopherY
196 天前
@qazwsxkevin 我也见过用数据库先建索引的,这种貌似是反复读取最好的方法了。不过对于 wifi7 这种协议,可能需要自己手动写解析函数了?
leonshaw
196 天前
自己写,只处理需要的协议和字段。wifi7 是物理层,跟抓包没关系。
kuanat
196 天前
https://github.com/google/gopacket

我之前在 go 经验的帖子里写过,这个库配合一些手动内存管理的技巧,在 10Gbps 网络上做实时处理没什么问题。

如果是 pcap 离线文件,直接按照示例写就好了。
kuanat
196 天前
还有楼上说得不对,网络包是一层一层嵌套的,必须从外向内解析。

当然理论上可以通过某层协议的标志从二进制的某个偏移开始解析,无视下层协议,但是这样做会损失很多信息,也不保证解析结果正确,与最初的目的不符。

gopacket 这个库是可以自己写未知协议扩展的,比如原版里面没有 pppoe/ppp 的支持,我在自己的项目里加上了,可能也就二三十行代码。就是写清楚字节流多少偏移对应该协议的某个字段。如果是那种非定长编码的格式,需要先解析头部的长度信息,再解析对应的字段。
lysShub
196 天前
@ChristopherY 只要不解应用层的,还是挺简单的,go 可以用 gvisor.dev/gvisor/pkg/tcpip/header
chengzishuai1
196 天前
gopacket 呢?
ChristopherY
196 天前
@kuanat 如果用 go 可以的话,那用 c 经典的库 libpcap 是不是也可以的,这方面有没有造好的轮子
ChristopherY
196 天前
@chengzishuai1 go 的库之前倒没试过,主要是用 c 和 Python 。看起来用 go 比较方便
xgdgsc
196 天前
cpp 或者 julia

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1049906

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX