pacp格式文件分析

x33g5p2x  于2个月前 转载在 其他  
字(2.0k)|赞(0)|评价(0)|浏览(26)

1 介绍

1.1. 五元组

网络通信过程中会发送大量的请求,每一个请求都需要通过IP数据包进行交互,但是IP数据包的头部信息过于复杂,如果通过IP数据包头进行数据包之间的区分就太复杂了,所以就产生了元组。

五元组是元组中的一种,还有四元组、七元组。通过五元组可以表示所在的数据包属于哪一个会话。该头正在数据包查重和流量对比的时候使用较多。

五元组的结构包括:IP源地址、源端口、目的IP地址、目标端口、4层通信协议。

1.2 pacp文件格式

文件头+数据包头+数据+数据包头+数据+数据包头+数据+…

数据包格式:

结构名称字节数作用
文件头Global Header24整个数据流文件,只会有一个Global Header,它定义了本文本的读取规则、最大存取长度限制等内容
数据包头 Packet Header16Pachet Header可以有多个,每个Packet Header后面会跟一串Packet Data, Packet Header定义了Packet Data的长度、时间戳等信息
Packet Data

2 结构介绍

2.1 Global Header 文件头

这里以nacp库中定义的结构为例
结构定义如下:

struct pcap_file_header {
	bpf_u_int32 magic;		// 文件开始标记
	u_short version_major;	// 当前文件主要的版本号
	u_short version_minor;  // 当前文件次要的版本号
	bpf_int32 thiszone;	    // 当地的标准时间 gmt to local correction; this is always 0
	bpf_u_int32 sigfigs;	// 时间戳精度    accuracy of timestamps; this is always 0
	bpf_u_int32 snaplen;	// 最大的存储长度 max length saved portion of each pkt
	bpf_u_int32 linktype;	// 链路类型      data link type (LINKTYPE_*)
};

1、Magic
名称:文件开始标记
大小4Byte
描述:用来识别文件自己和字节顺序。
0xa1b2c3d4:用来表示按照原来的顺序读取。
0xd4c3b2a1:表示下面的字节都要交换顺序读取。
考虑到计算机的内存结构,一般采用0xd4c3b2a1,如下
0xd4c3b2a1:所有字节都需要交换顺序读取

2、 Major
名称:当前文件主要的版本号
大小:2Byte
描述:一般为 0x0200 。【实际上因为需要交换读取顺序,所以计算机应该看到的是 0x0002

3、 Minor
名称:当前文件次要版本号
大小:4Byte
描述
一般为 0x0400
【计算机看到的应该是 0x0004

4、 ThisZone
名称:当地的标准时间
大小:4Byte
描述:如果用的是 GMT 则全零。一般都直接写 0000 0000

5、 SigFigs
名称:时间戳精度
大小:4Byte
描述:设置为 全零 即可。

6、 SnapLen
名称:最大存储长度
大小:4Byte
描述:如果想把整个包抓下来,设置为 ffff 0000,但一般来说 ff7f 0000就足够了。
【计算机中看到的应该是 0000 ff7f

7、 LinkType
名称:链路类型
大小:4Byte
描述

2.2 Packet Header 数据包头

这里以nacp库中定义的结构为例
数据包头有三个属性,每个属性占固定大小,所以可以使用一个结构体表示。

struct pcap_pkthdr {
	struct timeval ts;	// 捕获时间 time stamp
	bpf_u_int32 caplen;	// 数据帧/区的长度 length of portion present
	bpf_u_int32 len;	// 离线数据长度 length of this packet (off wire)
};

1、Timestamp
名称:被捕获时间的高位
大小:4Byte
描述:单位 seconds

2、Timestamp

名称:被捕获时间的低位
大小:4Byte
描述:单位 microseconds

3、Caplen

名称:当前数据区的长度,即抓取到数据帧的长度
大小:4Byte
描述:不包括 Packet Header 本身的长度,单位是 Byte,由此可以的找到下一个数据帧的位置。

4、Len

名称:离线数据长度
大小:4Byte
描述:网络中实际数据帧的长度,一般不大于 caplen,多数情况下和 Caplen的数值相等。

2.3 Packet Data 数据包数据

参考地址:
https://blog.csdn.net/qq_43481350/article/details/119909121
https://blog.csdn.net/m0_58087444/article/details/123078984
C语言解析pcap文件得到HTTP信息实例https://blog.csdn.net/koudaidai/article/details/7673082

相关文章