在拆包的过程中,我们必须要对WireShark截获的数据包的格式(即.pcap后缀的文件)有很清楚的了解,所以就把今天所学记录下来,以飨后来者。
一、结构体说明
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大。
Pcap文件头24B各字段说明:
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
以下(见图3)是我截获的数据包,以.pcap后缀保存的,用UE直接打开,可以详细看到它的内部结构和上面吻合。
图3 pcap文件部分截图
注:蓝色选中的部分即为24字节的数据包包头
我截获的的以太网帧的第一帧如图4所示:
图4 第一帧的内容
对比图3和数据报头16字节格式,你会很容易知道Frame 1的92bytes是5C 00 00 00计算出来的。到此为止,我想各位应该很清楚的了解Frame 1在什么位置,以及.pcap文件的格式了吧。
如有不懂,请留言,希望我们都能多交流,共同进步,体验计算机之美。