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-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);