Libpcap的官方网站是http://www.tcpdump.org/,该项目和Tcpdump项目是同一个团队维护。Libpcap是一个平台独立的tcp
数据包捕获开发包,制定了数据包离线存储的事实标准。接下来咱们就介绍一下该标准。网站
pcap文件格式以下:24字节文件头 +( 16字节pcap数据包信息 + 数据包 )* n。接下来具体介绍文件头的结构和pcap数this
据包信息的结构。spa
pcap文件头结构在pcap.h中有定义,先展现以下:code
//pcap.h里定义了文件头的格式
struct pcap_file_header {
bpf_u_int32 magic;
u_short version_major;
u_short version_minor;
bpf_int32 thiszone; /* gmt to local correction */ bpf_u_int32 sigfigs; /* accuracy of timestamps */ bpf_u_int32 snaplen; /* max length saved portion of each pkt */ bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */ }; 各字段的含义: magic: 4字节 pcap文件的magic num 目前为0xD4C3B2A1 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
pcap数据包信息,以下blog
//数据包头的格式
struct pcap_pkthdr { struct timeval ts; /* time stamp */ bpf_u_int32 caplen; /* length of portion present */ bpf_u_int32 len; /* length this packet (off wire) */ }; struct timeval { long tv_sec; /* seconds (XXX should be time_t) */ suseconds_t tv_usec; /* and microseconds */ }; ts: 8字节 抓包时间 4字节表示秒数,4字节表示微秒数 caplen:4字节 保存下来的包长度(最可能是snaplen,好比68字节) len: 4字节 数据包的真实长度,若是文件中保存的不是完整数据包,可能比caplen大
笔者经过对pcap文件的分析,发现pcap文件中的全部相关字段都是使用小头进行存储的。开发
以上咱们对pcap数据包的结构作了详细的介绍,后续我会撰写文章说明如何编写程序修改io
文件,主要会有两个例子,一个是用C语言方式修改,一个是用Python的方式修改。敬请期待。class