网络编程-pcap数据包格式

  Libpcap的官方网站是http://www.tcpdump.org/,该项目和Tcpdump项目是同一个团队维护。Libpcap是一个平台独立的

数据包捕获开发包,制定了数据包离线存储的事实标准。接下来我们就介绍一下该标准。

      pcap文件格式如下:24字节文件头 +( 16字节pcap数据包信息 数据包 )* n。接下来具体介绍文件头的结构和pcap数

据包信息的结构。

      pcap文件头结构在pcap.h中有定义,先展示如下:

//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数据包信息,如下

//数据包头的格式
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数据包的结构做了详细的介绍,后续我会撰写文章说明如何编写程序修改

文件,主要会有两个例子,一个是用C语言方式修改,一个是用Python的方式修改。敬请期待。

 

posted on 2014-10-30 23:05  liang_87  阅读(4146)  评论(0编辑  收藏  举报

导航