Chinaunix首页 | 论坛 | 博客
  • 博客访问: 138649
  • 博文数量: 38
  • 博客积分: 306
  • 博客等级: 二等列兵
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-29 15:19
文章分类

全部博文(38)

文章存档

2013年(23)

2012年(15)

我的朋友

分类: 网络与安全

2013-08-17 21:45:25

在拆包的过程中,我们必须要对WireShark截获的数据包的格式(即.pcap后缀的文件)有很清楚的了解,所以就把今天所学记录下来,以飨后来者。

一、结构体说明


pcap.h里定义了文件头的格式
struct pcap_file_header {
        bpf_u_int32 magic;
        u_short version_major;
        u_short version_minor;
        bpf_int32 thiszone;    
        bpf_u_int32 sigfigs;   
        bpf_u_int32 snaplen;   
        bpf_u_int32 linktype;  
};
看一下各字段的含义:
 magic:   4字节 pcap文件标识 目前为“d4 c3 b2 a1”
 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
  
数据报头的格式
struct pcap_pkthdr {
        struct timeval ts;     
        bpf_u_int32 caplen;    
        bpf_u_int32 len;       
};
struct timeval {
        long            tv_sec;        
        suseconds_t     tv_usec;       
};
 ts:    8字节 抓包时间 4字节表示秒数,4字节表示微秒数
 caplen:4字节 保存下来的包长度(最多是snaplen,比如68字节)
 len:   4字节数据报的真实长度,如果文件中保存的不是完整数据包,可能比caplen大。
二、结构图
图1详细的描述了我们截获数据包的大致结构:

图1 pcap文件整体结构

Pcap文件头24B各字段说明:

Magic:4B:0×1A 2B 3C 4D:用来识别文件自己和字节顺序。0xa1b2c3d4用来表示按照原来的顺序读取,0xd4c3b2a1表示下面的字节都要交换顺序读取。一般,我们使用0xa1b2c3d4
Major:2B,0×02 00:当前文件主要的版本号
Minor:2B,0×04 00当前文件次要的版本号
ThisZone:4B 时区。GMT和本地时间的相差,用秒来表示。如果本地的时区是GMT,那么这个值就设置为0.这个值一般也设置为0 SigFigs:4B时间戳的精度;全零
SnapLen:4B最大的存储长度(该值设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将该值设置为65535; 例如:想获取数据包的前64字节,可将该值设置为64)
LinkType:4B链路类型
常用类型:
0           BSD loopback devices, except for later OpenBSD
1            Ethernet, and Linux loopback devices
6            802.5 Token Ring
7            ARCnet
8            SLIP
9            PPP
10           FDDI
100         LLC/SNAP-encapsulated ATM
101         “raw IP”, with no link
102         BSD/OS SLIP
103         BSD/OS PPP
104         Cisco HDLC
105         802.11
108         later OpenBSD loopback devices (with the AF_value in network byte order)
113         special Linux “cooked” capture
114         LocalTalk
三、详细结构
直接来图吧,同样的事情用图总会直接简明,而且易懂。见图二。

图2 字段的详细结构
四、举例


以下(见图3)是我截获的数据包,以.pcap后缀保存的,用UE直接打开,可以详细看到它的内部结构和上面吻合。


图3  pcap文件部分截图

注:蓝色选中的部分即为24字节的数据包包头

我截获的的以太网帧的第一帧如图4所示:

图4 第一帧的内容

对比图3和数据报头16字节格式,你会很容易知道Frame 1的92bytes是5C 00 00 00计算出来的。到此为止,我想各位应该很清楚的了解Frame 1在什么位置,以及.pcap文件的格式了吧。

阅读(3734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~