pcap文件格式

Libpcap已经成为Linux,Unix平台上网络数据捕获的一个事实上的标准。所以,掌握Libpcap文件的格式也非常重要。这里用version2.4来说明(实际上,这个文件格式自从Libpcap的0.4版本,既是1998年来就没有改变过)。Libpcap文件用.pcap作为后缀。

image

从上图可以看出来,每个Libpcap文件都有一个全局的头(Global header),然后跟着是N(N>=0)个数据包组成的。每个数据包又分为包头(Packet Header)和包数据(Packet Data)部分。

1.Global Header

typedef struct pcap_hdr_s { guint32 magic_number; guint16 version_major; guint16 version_minor; gint32 thiszone; guint32 sigfigs; guint32 snaplen; guint32 network; } pcap_hdr_t;

这是Global Header的格式。

  • magic_number:用来识别文件自己和字节顺序。0xa1b2c3d4用来表示按照原来的顺序读取,0xd4c3b2a1表示下面的字节都要交换顺序读取。一般,我们使用0xa1b2c3d4
  • version_major, version_minor:Libpcap的版本
  • thiszone:时区。GMT和本地时间的相差,用秒来表示。如果本地的时区是GMT,那么这个值就设置为0.这个值一般也设置为0
  • sigfigs:精确的time stamps,实际上都设置为0
  • snaplen:该值设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将该值设置为65535;例如:想获取数据包的前64字节,可将该值设置为64。
  • network:数据链路层类型。1是Ethernet,所以一般设置为1。

2.Packet Header

每个数据包都以一个Packet Header开始,下面是其结构:

typedef struct pcaprec_hdr_s { guint32 ts_sec; guint32 ts_usec; guint32 incl_len; guint32 orig_len; } pcaprec_hdr_t;
  • ts-sec:该数据包被捕获的时间(date and time),值是自从January 1, 1970 00:00:00 GMT以来的秒数来记。也就是linux time_t
  • ts_usec:数据包被捕获时候的微秒(microseconds)数,是自ts-sec的偏移量。
  • incl_len:数据包实际抓获并且保存在文件中的长度(用bytes计算)。这个值不能大于orig_lensnaplen
  • orig_len:数据包被捕获是,在网络上出现的长度(用bytes计算)。如果incl_lenorig_len不同,则说明实际抓包的大小被snaplen所限制。

例如,实际上有一个包长度是1500 bytes(orig_len=1500),但是因为在Global Header的snaplen=1300有限制,所以只能抓取这个包的前1300个字节,这个时候,incl_len = 1300

3.Packet Data

Packet Data紧跟着Packet Header,长度是incl_len,没有格式

 

原文链接:http://blog.sina.com.cn/s/blog_490cb0420100pal9.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值