您的位置:首页 > 理论基础 > 计算机网络

pcap文件解析

2012-07-19 23:47 120 查看
毕设的代码又要进行一番大改动啦!想把抓来的数据包拿Wireshark来做协议分析,之前发现用Winpcap的pcap_dump()所保存出来的文件可以直接用Wireshark打开,感觉很不错,于是开始尝试研究pcap_dump()出来的文件的内部格式。待研究个差不多时突然想到也可以直接调用pcap_dump()来保存,这样就不必写程序生成Wireshark可以识别的文件了,并且可以see also how to use the kernel dump feature of WinPcap to obtain
high-performance dumps。这是Winpcap文档里的话,但是又提到At the moment, due to some problems with the new kernel buffer, this feature has been disabled,令人颇感困惑,不过还是值得试一试的,实在不行再用程序生成文件。
pcap_dump()所保存.cap文件格式:

一上来是4字节的文件标示:D4 C3 B2 A1,或者说是一个整数0xA1B2C3D4按照主机序(高位在后低位在前)保存起来了。

接下来的4字节看起来像是版本号,但完全搞不清楚这个版本号是怎么排的,我的电脑商安装的是4.1Beta4版,这4个字节是:02 00 04 00。另外,Wireshark识别这一字段时认为前两字节是主版本号,我尝试将这4字节改为01 00 04 00,再打开文件时报错说main version 1 unsupported……。

接下来是8字节的00,没什么好说的。

再下去是4字节记录Winpcap抓包时所抓取的数据长度,也就是pcap_open()函数的第二个参数snaplen的值。例如snaplen=65535时,这4字节成为FF FF 00 00.

然后4字节记录网络类型,如十进制1表示以太网,6表示令牌环网,15表示帧中继硬件格式等等。一般在以太网环境下,这4个字节为01 00 00 00.

以上几个字段属于文件头部分,接着就是一个一个的数据包了。每个数据包前面还有相应的16字节标记信息,前8字节为时间戳;然后4字节是捕获到的数据长度,例如一个数据包实际长度为60字节,但由于pcap_open()函数的第二个参数snaplen的值设置为50,所以捕获到的长度为50,如果snaplen设置为65535,那么捕获到的长度应为实际数据包长60;再然后是该数据包的实际长度,用4字节表示;最后是数据包全文,从链路层数据开始记录。一个数据包完了之后是下一个数据包,直到所有数据包记录结束为止。实际上就是把抓包函数的两个参数struct pcap_pkthdr
*header和const u_char *pkt_data写到了文件里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  header buffer 文档 网络 c