Wireshark 数据分析(一)
pcap包的结构
pcap数据包由 pcap文件头、packet包头 和 packet数据 组成如图所示(其中packet数据包也就是一帧以太帧):
Pcap文件头24 byte, 各字段说明:
-
Magic (标识位)
4 byte:这个标识位的值是16进制的 0xa1,0xb2,0xc3,0xd4 (正序)用来标示文件的开始。若为逆序(0xd4,0xc3, 0xb2, 0xa1)则需要将后面的Packet Header进行逆序处理 -
Major(主版本号):2 byte, 默认值 0x02, 0x00
-
Minor(副版本号):2 byte,默认值0x04, 0x00
-
ThisZone(区域时间):4 byte当地的标准时间;全零
-
SigFigs(精确时间戳): 4 byte时间戳的精度;全零1
-
SnapLen(精确时间戳)
4 byte, 最大的存储长度, 该值设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将该值设置为65535;例如:想获取数据包的前64字节,可将该值设置为64 -
LinkType(链路层类型):4 byte链路类型, 数据包的链路层包头决定了链路层的类型
Packet包头(16 byte)各字段说明
-
Timestamp: 时间戳高位,精确到seconds , 4 byte , 32位。 秒计时,一个UNIX格式的精确到秒时间值,用来记录数据包抓获的时间,记录方式是记录从格林尼治时间的1970年1月1日 00:00:00 到抓包时经过的秒数
-
Timestamp:4 byte , 时间戳低位,精确到microseconds 微秒值
-
Caplen:4 byte,当前数据区的长度,所抓获的数据包保存在pcap文件中的实际数据帧长度,由此可以得到下一个数据帧的位置
-
Len: 4 byte,离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。如果文件中保存不是完整的数据包,那么这个值可能要比前面的数据包长度的值大。(note:
编程未采用)
Packet数据(不定长)
即 Packet(通常就是链路层的数据帧去掉前面用于同步的前导码和标识帧开始8字节的帧开始符和最后用于CRC校验4字节的帧校验序列)具体内容,长度就是Caplen,这个长度的后面,就是当前PCAP文件中存放的下一个Packet数据包,可以确定下一组数据在文件中的起始位置
关于以太帧数据包中Frame、Ethernet层、IP层的分析请见Wireshark 数据分析(二)
关于以太帧数据包中 TCP 分析请见Wireshark 数据分析(三)