12.1.2 每个数据包的头信息

WinPcap在存储每个数据包时给该数据包添加了对应的头信息,这头信息用来描述该数据包的实际捕获时间、实际捕获长度,以及数据包的原始长度。WinPcap采用pcap_sf_pkthdr结构体来表示头信息,该结构体的具体定义如下:


struct pcap_sf_pkthdr{

struct pcap_timeval ts;/时间戳/

bpf_u_int32 caplen;/数据包的实际捕获长度/

bpf_u_int32 len;/数据包原始长度/

};


上述函数中,表示数据包实际捕获时间的时间戳的结构体pcap_timeval的定义如下:


struct pcap_timeval{

bpf_int32 tv_sec;//

bpf_int32 tv_usec;/微妙/

};


文件中数据包头信息的实际存储如图12-2所示,各字段的具体含义如表12-2所示。

12.1.2 每个数据包的头信息 - 图1

图 12-2 数据包头信息(选中部分)

12.1.2 每个数据包的头信息 - 图2

存储数据包头信息的具体实现代码如下:


/设置数据包头信息结构体pcap_sf_pkthdr的数据/

sf_hdr.ts.tv_sec=h->ts.tv_sec;

sf_hdr.ts.tv_usec=h->ts.tv_usec;

sf_hdr.caplen=h->caplen;

sf_hdr.len=h->len;

/把结构体内容写入文件/

fwrite(&sf_hdr,sizeof(sf_hdr),1,f);