9512.net
甜梦文库
当前位置:首页 >> >>

简洁的Pcap文件格式--Wireshark


PCAP 文件格式协议分析

一、基本格式: 文件头 数据包头 数据报 数据包头 数据报...... pcap 文件格式 结构

文件头 数据包头 1 数据包 数据包头 n-1 数据包 数据包头 n 数据包

格式如结构体 pcap_file_header 格式如 pcap_pkthdr 数据包 格式如 pcap_pkthdr 数据包 格式如 pcap_pkthdr 数据包

二、文件头结构体: sturct pcap_file_header { DWORD magic; WORD version_major; WORD version_minor; DWORD thiszone; DWORD sigfigs; DWORD snaplen; DWORD linktype; } 说明: 1、标识位:32 位的,这个标识位的值是 16 进制的 0xa1b2c3d4。 a 32-bit magic number ,The magic number has the value hex a1b2c3d4. 2、主版本号:16 位, 默认值为 0x2。 a 16-bit major version number,The major version number should have the value 2. 3、副版本号:16 位,默认值为 0x04。 a 16-bit minor version number,The minor version number should have the value 4. 4、区域时间:32 位,实际上该值并未使用,因此可以将该位设置为 0。 a 32-bit time zone offset field that actually not used, so you

can (and probably should) just make it 0; 5、精确时间戳:32 位,实际上该值并未使用,因此可以将该值设置为 0。 a 32-bit time stamp accuracy field tha not actually used,so you can (and probably should) just make it 0; 6、数据包最大长度:32 位,该值设置所抓获的数据包的最大长度,如果所有数 据包都要抓获,将该值设置为 65535; 例如:想获取数据包的前 64 字节,可将 该值设置为 64。 a 32-bit snapshot length" field;The snapshot length field should be the maximum number of bytes perpacket that will be captured. If the entire packet is captured, make it 65535; if you only capture, for example, the first 64 bytes of the packet, make it 64. 7、链路层类型:32 位, 数据包的链路层包头决定了链路层的类型。 a 32-bit link layer type field.The link-layer type depends on the type of link-layer header that the packets in the capture file have: 以下是数据值与链路层类型的对应表 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

三、数据包头结构体: struct pcap_pkthdr { struct timeval ts; DWORD caplen;

DWORD }

len;

struct timeval { DWORD GMTtime; DWORD microTime } 说明: 1、时间戳,包括: 秒计时: 位, 32 一个 UNIX 格式的精确到秒时间值, 用来记录数据包抓获的时间, 记录方式是记录从格林尼治时间的 1970 年 1 月 1 日 00:00:00 到抓包时经过的 秒数; 毫秒计时:32 位, 抓取数据包时的毫秒值。 a time stamp, consisting of: a UNIX-format time-in-seconds when the packet was captured, i.e. the number of seconds since January 1,1970, 00:00:00 GMT (that GMT, *NOT* local time!); the number of microseconds since that second when the packet was captured; 2、数据包长度:32 位 ,标识所抓获的数据包保存在 pcap 文件中的实际长度, 以字节为单位。 a 32-bit value giving the number of bytes of packet data that were captured; 3、数据包实际长度: 所抓获的数据包的真实长度,如果文件中保存不是完整的 数据包,那么这个值可能要比前面的数据包长度的值大。 a 32-bit value giving the actual length of the packet, in bytes (which may be greater than the previous number, if you are not saving the entire packet).

Wireshark 的 Pcap 文件格式分析
前段时间因工作要求, 需要对各种数据包进行分析和操作,内容涉及网路协议分 析,socket,文件操作等。在此分享下学习和实践的经验。 首先介绍下网络抓包、协议分析的必备软件 Ethereal,新版(Wireshark) 以下还以 Ethereal 代之,目前最新版本已经支持在无线局域网抓包了。Linux 和 Windows 均有对应安装包,它们分别是 gcc 和 VC++编译的。不过 Windows 下 是基于 Winpcap 而 Linux 下则是 Libcap。Ethereal 作为网路协议分析、学习、 开发的敲门软件,其使用技巧及其原理机 制(BPF)网上都有比较详尽的介绍,

当初我收集的相关资料随后也会上传,不再多说。下面主要介绍下 Ethereal 默 认的*.pcap 文件保存格式。

Pcap 文件头 24B 各字段说明: Magic:4B:0x1A 2B 3C 4D:用来标示文件的开始 Major:2B,0x02 00:当前文件主要的版本号 Minor:2B,0x04 00 当前文件次要的版本号 ThisZone:4B 当地的标准时间;全零 SigFigs:4B 时间戳的精度;全零 SnapLen:4B 最大的存储长度 LinkType:4B 链路类型 常用类型: 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

Packet 包头和 Packet 数据组成 字段说明: Timestamp:时间戳高位,精确到 seconds Timestamp:时间戳低位,精确到 microseconds Caplen:当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据 帧的位置。 Len:离线数据长度:网络中实际数据帧的长度,一般不大于 caplen,多数情况 下和 Caplen 数值相等。 Packet 数据:即 Packet(通常就是链路层的数据帧)具体内容,长度就是 Caplen,这个长度的后面,就是当前 PCAP 文件中存放的下一个 Packet 数据包, 也就 是说:PCAP 文件里面并没有规定捕获的 Packet 数据包之间有什么间隔字 符串,下一组数据在文件中的起始位置。我们需要靠第一个 Packet 包确定。 最 后,Packet 数据部分的格式其实就是标准的网路协议格式了可以任何网络教材 上找得到。

网络抓包、 协议分析的强大的软件 Ethereal, 由自由软件发展而来, 由于众 多 爱好者的不断完善和添加网络协议模块, 现在已经能够支持几乎所有常见的网络 协议数据的分析。 现在 Ethereal 改称 Wireshark 了,目前最新版 本已经支持在 无线局域网抓包了。Linux 和 Windows 均有对应安装包,它们分别是 gcc 和 VC++ 编译的。不过 Windows 下是基于 Winpcap 而 Linux 下则是 Libcap。Ethereal 作 为网路协议分析、学习、开发的专业门软件,其保存网络数据包的 格式逐渐成 为了一种标准,下面就介绍下 Ethereal 默认的*.pcap 文件保存格式。

Pcap 文件头 24B 各字段说明: Magic:4B:0x1A 2B 3C 4D:用来标示文件的开始 Major:2B,0x02 00:当前文件主要的版本号 Minor:2B,0x04 00 当前文件次要的版本号 ThisZone:4B 当地的标准时间;全零 SigFigs:4B 时间戳的精度;全零 SnapLen:4B 最大的存储长度 LinkType:4B 链路类型 常用类型: 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

Packet 包头和 Packet 数 据组成 字段说明: Timestamp:时间戳高位,精确到 seconds Timestamp:时间戳低位,精确到 microseconds Caplen:当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据 帧的位置。 Len:离线数据长度:网络中实际数据帧的长度,一般不大于 caplen, 多数情 况下和 Caplen 数值相等。

Packet 数据:即 Packet(通常就是链路层的数据帧)具体内容,长度就是 Caplen,这个长度的后面,就是当前 PCAP 文件中存放的下一个 Packet 数据包, 也就 是说:PCAP 文件里面并没有规定捕获的 Packet 数据包之间有什么间隔字 符串,下一组数据在文件中的起始位置。我们需要靠第一个 Packet 包确定。 最 后,Packet 数据部分的格式其实就是标准的网路协议格式了,需要具体针对不 同的协议查找相关的资料了。 ethereal 抓包结果中显示的各行颜色的意义:

pcap 文件格式是 bpf 保存原始数据包的格式,很多软件都在使用,比如 tcpdump、wireshark 等 等, 了解 pcap 格式可以加深对原始数据包的了解,自己也可以手工构造任意的数据包进行测试。 pcap 文件的格式为: 文件头 24 字节 数据包头为 16 字节,后面紧跟数据包 ...... 数据包头 + 数据包 数据包头 + 数据包

pcap.h 里定义了文件头的格式 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: major: minor: 4 字节 pcap 文件标识 目前为“d4 c3 b2 a1” 2 字节 主版本号 2 字节 次版本号 #define PCAP_VERSION_MAJOR 2 #define PCAP_VERSION_MINOR 4 并未使用,目前全为 0 并未使用,目前全为 0 /* gmt to local correction */ /* accuracy of timestamps */ /* max length saved portion of each pkt */ /* data link type (LINKTYPE_*) */

thiszone:4 字节 时区修正 sigfigs: 4 字节 精确时间戳

snaplen: 4 字节 抓包最大长度 如果要抓全,设为 0x0000ffff(65535), tcpdump -s 0 就是设置这个参数,缺省为 68 字节 linktype:4 字节 链路类型 | | | 数据包头的格式 struct pcap_pkthdr { struct timeval ts; bpf_u_int32 caplen; bpf_u_int32 len; }; struct timeval { long suseconds_t }; tv_sec; tv_usec; /* seconds (XXX should be time_t) */ /* and microseconds */ /* time stamp */ /* length of portion present */ /* length this packet (off wire) */ magic thiszone |major | 一般都是 1:ethernet

| minor | snaplen | linktype |

sigfigs

| d4 c3 b2 a1 | 02 00 | 04 00 | 00 00 00 00 | 00 00 00 00 | ff ff 00 00 | 01 00 00 00

ts: len:

8 字节 抓包时间 4 字节表示秒数,4 字节表示微秒数 4 字节 数据包的真实长度,如果文件中保存的不是完整数据包,可能比 caplen 大

caplen:4 字节 保存下来的包长度(最多是 snaplen,比如 68 字节)

了解了 pcap 文件格式,就可以自己手工构造任意数据包了,可以以录好的包为基础, 用十六进制编辑器打开进行修改。

pcap 格式, 常用的文件格式, 采用 tcpdump 或者 wireshark 得到的文件格式.

pcap 文件的组成如下:

Global Header

Packet Header

Packet Data

Packet Header

Packet Data

Packet Header

Packet Data

...

先用 wireshark 抓一个包,然后用 ultraedit 的十六进制模式打开该文件对照一 下:

抓包后的界面如下 可以看到是一个 tcp 连接发起的 syn 包: 14 个字节的 mac 层 baotou 20 个字节的 ip 包头 20 个字节的 tcp 包头 外加 12 个字节的 tcp 包头可选项 总共 54+12 = 66 个字节

然后用 ultraedit 打开对照看一下, pcap 文件究竟是个什么乾坤:

第一部分是 Global Length

首先是 4 个字节的 magic number, 这个主要是用来标识文件类型的

接着是 major number, minor number, 文件格式的主次版本号, 因为是网络字 节序,所以反过来读 0002, 0004, 也就是 2.4

在下面就是包头中时间戳和 UTC 时间的偏移量, 秒为单位, 这里是全 0, 经常 是全 0, 包头中的时间戳加上该偏移量就是该包被抓到时的 UTC 时间.

紧接着的 4 个字节是时间戳的精度, 几乎是个扯淡的字段,所以这个字段一般就 是 00 00 00 00

再下面 4 个字节是 snap length, 也就是你抓包时截断的大小, 全抓一般是 65535, 也就是 0xFFFF,网络字节序,表示为 FF FF 00 00

第二部分是 Packet Header

最先的 4 个字节是网络类型 , 为 01 00 00 00 , 反过来 00 00 00 01, 也就 是以太网,即在以太网上面抓到的包 下面 8 个字节分别是,该包的时间戳, 前面 4 个是 秒为单位, 后面 4 个是 纳秒 为单位,同样是网络字节序 让我们来算算 1970.01.01 00:00:00.000000 + 0x4D032640 秒 + 0x000A4223 纳秒是多少 + 7 小时 + 20 分 + 32 秒

0x4D032640 秒 = 1292052032 秒 = 14954 天 0x000A4223 纳秒 = 672291 纳秒

正好是 2010.12.11 15:20:32.672291 秒

bingo, 看来没错了!

下面的 8 个字节分别是 抓包字节数(4 字节), 包原始字节数(4 字节), 看来一点 不漏的抓下来了. 0x42 = 4x16 + 2 = 64 + 2 = 66 字节, 一点不差.

补充: magic_number: 用于检测文件格式和字节序, magic number 的原始数据为 0xA1B2C3D4, 如果读 到的 magic number 被反转过,那么下面 global header 和 packet header 中的所 有字段的值都是被反转过的, 在转换时就需要反转一下. 至于包的数据部分,原始是什么样就是什么样,没有边界对齐什么的.

network 1 为以太网 6 为令牌环网 10 为 FDDI 0 为回环接口


赞助商链接

更多相关文章:
SIP进阶-Wireshark使用及实例分析_图文
SIP进阶-Wireshark使用及实例分析_计算机软件及应用_...一个事务简单说就是请求 + 响应,按标准必须以 z9...连续两个新的事务请求(reinvite_transaction.pcap) ...
wireshark练习及答案lab-ipv4
The trace is here: http://scisweb.ulster.ac.uk/~kevin/com320/labs/wireshark/trace-ipv4.pcap The text file is here: http://scisweb.ulster.ac.uk...
Wireshark 简介及抓取数据方法
通过抓取网络数据对分析网络问题是很重要的,下文将会简单的介绍下如 何使用 Wireshark 来抓包。 2、如果之前没有安装过“Winpcap”请在下面图上把安装“Win...
wireshark
与很多其他网络工具一样, Wireshark 也使用 pcap n...封包详细信息”中相同,只是改为以 16 进制的格式...安装、运行 Wireshark 并开始分 析网络是非常简单的...
网络协议分析软件Wireshark简要说明
安装中,目前包含的网络数据采集软件是 winpcap ...类型 传输控制协议 TCP 数据流波形图 Wireshark ...实际操作其实很 简单,共分 5 步: 1 按照这个 ...
...all-in-one+WinPcap 4.1.2 Installer+Wireshark1.6....
暂无评价|0人阅读|0次下载|举报文档 GNS3-0.8.2-all-in-one+WinPcap 4.1.2 Installer+Wireshark1.6.5安装及配置_IT认证_资格考试/认证_教育专区。GNS3-0...
实验7网络报文分析_图文
学会简单使用网络分析工具(如 WireShark、Sniffer、...Wireshark 使用 WinPCAP 作为接口,直接与网卡进行...喜欢此文档的还喜欢 网络报文格式分析 6页 3下载券...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图