pcap:过程特性分析软件包
首先pcap文件是用来存储数据的,只不过具有其特定的存储格式。而pcap文件来源于监控软件使用libpcap(类Unix)或WinPcap(Windows)捕获通过网络传播(如监视路由器等产生数据接口的地方)的数据包,并在较新版本中链路层的网络上传输数据包,以及获取可能与libpcap或WinPcap一起使用的网络接口列表。pcap API是用C编写的,而C++程序则可以直接链接到C API或使用面向对象的封装器。
常见的读取或产生此类文件的软件有:cpdump,Wireshark,CA NetMaster或Microsoft Network Monitor 3.x,,典型的文件扩展名是.pcap,除此之外.cap和.dmp也是常用的。
那么要想具体了解pcap就要知道其内部数据的存储格式:
学习参考前辈链接:http://t.csdn.cn/4kOtj
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文件: