您的位置:首页 > 其它

pcap文件格式分析

2012-10-27 21:38 246 查看
pcap文件格式是常用的数据报存储格式,包括wireshark在内的主流抓包软件都可以生成这种格式的数据包
下面对这种格式的文件简单分析一下:

pcap文件的格式为:

文件头 24字节

数据报头 + 数据报 数据包头为16字节,后面紧跟数据报

数据报头 + 数据报 ......

pcap.h里定义了文件头的格式

struct pcap_file_header {

bpf_u_int32 magic;

u_short version_major;

u_short version_minor;

bpf_int32 thiszone;

bpf_u_int32 sigfigs;

bpf_u_int32 snaplen;

bpf_u_int32 linktype;

};

看一下各字段的含义:

magic: 4字节 pcap文件标识 目前为“d4 c3 b2 a1”

major: 2字节主版本号 #define PCAP_VERSION_MAJOR 2

minor: 2字节次版本号 #define PCAP_VERSION_MINOR 4

thiszone:4字节时区修正 并未使用,目前全为0

sigfigs: 4字节精确时间戳 并未使用,目前全为0

snaplen: 4字节抓包最大长度如果要抓全,设为0x0000ffff(65535),

tcpdump -s 0就是设置这个参数,缺省为68字节

linktype:4字节链路类型 一般都是1:ethernet

数据报头的格式

struct pcap_pkthdr {

struct timeval ts;

bpf_u_int32 caplen;

bpf_u_int32 len;

};

struct timeval {

long tv_sec;

suseconds_t tv_usec;

};

ts: 8字节 抓包时间 4字节表示秒数,4字节表示微秒数

caplen:4字节 保存下来的包长度(最多是snaplen,比如68字节)

len: 4字节数据报的真实长度,如果文件中保存的不是完整数据包,可能比caplen大

下图仅供参考




CAP文件是比较通用的一种文件格式,基本上大多数抓包软件都支持以此格式将捕获的网络数据包存储下来。
需要说明的是,CAP文件存储下来的,一般都是网络数据帧。不同网络传输协议下的帧格式是有差异的,所以这里以以太网帧作讨论。我所分析的CAP包是由windump抓取的。tcpdump和ethereal抓的包格式基本一致。

CAP文件是全十六进制数据文件而不是文本文件,所以其结构需要分析,由于我并不打算做专门的分析软件,所以我只作对我来说有意义的一些数据的分析。CAP里面的数据有些地方是和我们常规数据的顺序一样的,有些位置是标准的高位取反,根据该位置表示的数据类型确定。

CAP文件的前24个16进制位我们不用关心,随后紧跟的八个位(后面所有的位都指两个16进制数构成的一个十六进制位,如AC,B8就是两个16进制位),是抓包的时间戳标记,我换算了半天不知道CAP文件是具体怎么表示的,里面应该包括了年月日和具体到毫秒级别的时间。

随后的8个位(也就是从第33个16进制位)是比较重要的,其中前4个是我们抓取到的数据帧长度,同时也关系到我们如何在CAP文件中得到下一组数据帧位置。这四个位每个的前两位高位取反后表示数据帧的长度,第一组是软件抓取到的数据帧长度,后面一组是网络中实际数据帧的长度。一般来说第一组小于等于第二组数据。这八个位结束后,就是帧的具体内容,长度就是前面的第一组数,这个长度的后面,就是CAP存的下一组帧数据,也就是说,CAP文件里面并没有规定捕获的帧数据之间有什么间隔字符串,我们需要靠第一组数确定,下一组数据在文件中的起始位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: