菜鸟笔记
提升您的技术认知

pcap(cap)包文件解析-ag真人游戏

阅读 : 34

   pcap文件是常用的数据报存储格式,可以理解为就是一种文件格式,只不过里面的数据是按照特定格式存储的,所以我们想要解析里面的数据,也必须按照一定的格式。普通的记事本打开pcap文件显示的是乱码,用ultra edit能够以16进制数据的格式显示,用wireshark这种抓包工具就可以正常打开这种文件,愉快地查看里面的网络数据报了,同时wireshark也可以生成这种格式的文件。当然这些工具只是我经常使用的,还有很多其它能够查看pcap文件的工具。

.pcap/.cap文件结构如下:

1.pcap header

    文件头,每一个pcap文件只有一个文件头,总共占24(b)字节,以下是总共7个字段的含义。

magic(4b): 标记文件开始,并用来识别文件和字节顺序。值可以为0xa1b2c3d4或者0xd4c3b2a1,如果是0xa1b2c3d4表示是大端模式,按照原来的顺序一个字节一个字节的读,如果是0xd4c3b2a1表示小端模式,下面的字节都要交换顺序。现在的电脑大部分是小端模式。

major(2b): 当前文件的主要版本号,一般为0x0200

minor(2b): 当前文件的次要版本号,一般为0x0400

thiszone(4b): 当地的标准事件,如果用的是gmt则全零,一般全零

sigfigs(4b): 时间戳的精度,一般为全零

snaplen(4b): 最大的存储长度,设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将值设置为65535

linktype(4b): 链路类型。解析数据包首先要判断它的linktype,所以这个值很重要。一般的值为1,即以太网
常用的linktype(链路类型):
值     类型描述
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.packet header

数据包头可以有多个,每个数据包头后面都跟着真正的数据包。以下是packet header的4个字段含义

timestamp(4b): 时间戳高位,精确到seconds,这是unix时间戳。捕获数据包的时间一般是根据这个值
timestamp(4b): 时间戳低位,能够精确到microseconds
caplen(4b): 当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
len(4b): 离线数据长度,网路中实际数据帧的长度,一般不大于caplen,多数情况下和caplen值一样
3.packet data

packet是链路层的数据帧,长度就是packet header中定义的caplen值,所以每个packet header后面都跟着caplen长度的packet data。也就是说pcap文件并没有规定捕获的数据帧之间有什么间隔字符串。packet数据帧部分的格式就是标准的网络协议格式了。

eg:
下图为16进制pcap文件:

备注:
红色部分:pcap header
蓝色部分:packet header
pcapheader

magic(4b): d4 c3 b2 a1 表示小端模式,后面的字节从后往前读;
major(2b): 02 00,计算机读的是00 02;
minor(2b): 04 00,计算机读的是00 04;
thiszone(4b): 00 00 00 00,全零;
sigfigs(4b): 00 00 00 00,全零;
snaplen(4b): ff ff 00 00, 计算机读的是:00 00 ff ff,所以是2^16-1=65535
linktype(4b): 01 00 00 00, 计算机读的是:00 00 00 01,表示是以太网类型
packet header

timestamp(4b): ca 4d a4 5c,计算机读的是:5c a4 4d ca,十进制:1554271690,日期为:2019-04-03 14:08:10;
timestamp(4b): 4f 2a 08 00,计算机读的是:00 08 2a 4f,十进制:535119,代表535119ms;
caplen(4b): ba 1c 00 00, 计算机读的是:00 00 1c ba,十进制:7354,代表后面的7354个字节为一个数据帧,之后又是一个新的packetheader,如此循环;
len(4b): ba 1c 00 00,和caplen相同

wireshark打开.pcap文件:

网站地图