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 为回环接口



更多相关文章:
简洁的Pcap文件格式--Wireshark.doc
简洁的Pcap文件格式--Wireshark简洁的Pcap文件格式--Wire
Pcap 文件格式WireShark.pdf
Pcap 文件格式WireShark - Pcap? 文件格式和? WireShark?   PCAP 是一个数据包抓取库, 很多软件都是用它来作为数据包抓取工具的。 WireSha...
Wireshark的Pcap文件格式分析及解析源码.doc
Wireshark 的 Pcap 文件格式分析及解析源码 下面主要介绍下 Ethereal 默认的*....pcap文件格式及文件解析 13页 1下载券 简洁的Pcap文件格式--Wi... 12页 1...
pcap文件格式及文件解析_图文.pdf
C语言实现PCAP文件分析实现步骤: 1)用Wireshark软件抓包得到test.pcap文件 2)程序...Wireshark的Pcap文件格式... 6页 1下载券 简洁的Pcap文件格式--Wi... ...
pcap文件格式及文件解析_图文.doc
PCAP 文件分析 实现步骤: 1)用 Wireshark 软件抓包得到 test.pcap 文件 2)...Wireshark的Pcap文件格式... 6页 免费 简洁的Pcap文件格式--Wi... 12页 ...
Pcap文件格式.doc
PCAP 文件分析 实现步骤: 1)用 Wireshark 软件抓包得到 test.pcap 文件 2)...简洁的Pcap文件格式--Wi... 12页 免费 Pcap 文件格式和 WireSh... 7页 ...
工具类文档--wireshark.doc
15 北京宽广智通北京中心内部文档 Wireshark 在业务识别中的作用 Wireshark 的...保存 pcap 文件命名 格式:业务名称 _ 版本号 _ 日期 _ 特征类型 _ 序列号 ...
构建TCPDUMPWIRESHARK PCAP文件.txt
构建TCPDUMPWIRESHARK PCAP文件 - 构建tcpdumpwireshark pcap文件 pcap文件格式是bpf保存原始数据包的格式,很多软件都在使用,比如tcpdump、...
Wireshark使用教程.doc
安装 WinPcap(Install WinPcap) Wireshark 安装包里包含了最新版的 WinPcap ...这里显示的内容 与“封包详细信息”中相同,只是改为以 16 进制的格式表述。 4...
Wireshark使用指导书.doc
Wireshark和WinPcap的安装比较简单,这里就不累述了,但要注意安装操作系统对应的...建议开启。 Capture packets in pcap-ng format:Wireshark的下一代抓包文件格式...
wireshark使用.doc
关于对winreshark的简单使用方法。 Wireshark 使用...Wireshark 安装里包含了最新版的 WinPcap 安装包...配置值,输入的值同样要符合你选择的 的属性值类型...
Wireshark-win32的使用与测试_图文.doc
安装过程比较简单,依照提示一步一步安装即可,注意...WinPcap, 安装完 WinPcap 后继续安装 Wireshark。 ...和目的 IP 地址、所属的协议类型,以及包的类型等...
Wireshark入门教程及破解_图文.ppt
//www.wireshark.org/downlo ad.html Winpcap ? ...鼠标右键菜单提供的简单TCP Stream过滤方法 ? 可以...解密SSL数据包使用OpenSSL命令转换私钥文件格式去掉私钥...
Wireshark使用教程_图文.doc
可以捕捉多种网络接口类型的包,哪怕是无线局域网...举个简单的例子:在 100MBIT/s 全双工以太网中捕捉...Wireshark0.99.4(需安装自带的 WinPCap3.1), 你...
Wireshark使用教程_图文.doc
可以捕捉多种网络接口类型的包,哪怕是无线局域网...举个简单的例子:在 100MBIT/s 全双工以太网中捕捉...Wireshark0.99.4(需安装自带的 WinPCap3.1), 你...
WireShark使用说明_图文.ppt
Wireshark 可 以捕捉多种网络接口类型的包,哪怕是...Wireshark 安装文件自带WinPcap最新版本,选择安装。 ...Wireshark提 供了简单而强大的过滤语法,你可以用...
WireShark使用说明_图文.ppt
Wireshark 可 以捕捉多种网络接口类型的包,哪怕是...Wireshark 安装文件自带WinPcap最新版本,选择安装。 ...Wireshark提 供了简单而强大的过滤语法,你可以用...
WireShark使用说明_图文.ppt
而在混杂模式下,Wireshark除捕获上述类型的数据外...设置捕获过滤规则 Wireshark使用libpcap过滤语句进行...Wireshark提 供了简单而强大的过滤语法,你可以用...
wireshark命令行工具介绍_图文.ppt
wireshark命令行工具介绍_计算机软件及应用_IT/计算机...4.转换包文件格式 tshark -r http.pcap -w http...简单实用wireshark命令行... 1页 1下载券 wire...
wireshark_introduction.pdf
要求完成: 完成简单的数据报文的抓取和观察; ...Wireshark 和 libpcap 或 WinPCap 数 据捕获库的...4、 数据包内容窗口 使用 ASCII 和十六进制格式,...
更多相关标签:

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

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