pcap文件格式及文件解析.docx
14页第一部分:PCAP 包文件格式一 基本格式:文件头 数据包头数据报数据包头数据报......二、文件头:文件头结构体sturct pcap_file_header{DWORD magic;DWORD version_major;DWORD version_minor;DWORD thiszone;DWORD sigfigs;DWORD snaplen;DWORD linktype;}说明:1、标识位:32 位的,这个标识位的值是 16 进制的 0xa1b2c3d4a 32-bit magic number ,The magic number has the value hex a1b2c3d4.2、主版本号:16 位, 默认值为 0x2a 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 位,实际上该值并未使用,因此可以将该位设置为 0a 32-bit time zone offset field that actually not used, so you can (and probably should) just make it 0;5、精确时间戳:32 位,实际上该值并未使用,因此可以将该值设置为 0a 32-bit time stamp accuracy field tha not actually used,so you can (and probably should) just make it 0;6、数据包最大长度:32 位,该值设置所抓获的数据包的最大 长度,如果所有数据包都要抓获,将该值设置为 65535;例如:想获取数据包的前 64 字节,可将该值设置为 64a 32-bit snapshot lengthThe 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 thepackets in the capture file have:以下是数据值与链路层类型的对应表0 BSD loopback devices, except for later OpenBSD1 Ethernet, and Linux loopback devices 以太网类型,大多数的数据包为这种类型6 802.5 Token Ring7 ARCnet8 SLIP9 PPP10 FDDI100 LLC/SNAP-encapsulated ATM101 raw IP, with no link102 BSD/OS SLIP103 BSD/OS PPP104 Cisco HDLC105 802.11108 later OpenBSD loopback devices (with the AF_value in network byte order)113 special Linux cooked capture114 LocalTalk三 packet 数据包 头:struct pcap_pkthdr{struct tim ts;DWORD caplen;DWORD len;}struct tim{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).四:packet 数据:即 Packet(通常就是链路层的数据帧)具体内容,长度就是 Caplen,这个长度的后面,就是当前 PCAP 文件中存放的下一个 Packet 数据包,也就是 说:PCAP 文件里面并没有规定捕获的 Packet 数据包之间有什么间隔字符串,下一组数据在文件中的起始位置。
我 们需要靠第一个 Packet 包确定最后,Packet 数据部分的格式其实就是 标准的网路协议格式了可以任何网络教材上找得到五:举例分析图中最开始的绿色部分就是 24 Bytes 的 Pcap Header,接下来红色的 16 Bytes 是第一个消息的 Pcap Header后面的红色的 16 Bytes 是第二个消息的 Pcap Header两 块蓝色的部分分别是两个消息从链路层开始的完整内容在网 络上实际传输 的数据包在数据链路层上每一个Packet 开始都会有 7 个用于同步的字节和一个用于标识该 Packet 开始的字节,最后还会有四个 CRC 校验 字节;而 PCAP 文件中会把前 8 个字节和最后 4 个校验自己去掉,因为这些信息对于协议分析是没有用的用 Wireshark 打开一个 PCAP 数据包,每条消息的所有 field 会被解析出来并会按照协议层次折叠起来第一层显示的是 FrameXXX,这一级别没有对应 某层具体的协议,而是对本条消息的一个概括性总结,描述了一些有用的概括性信息,比如从里面我们可以看到本条消息各种协议的层次关系,展开其它 协议层之后对应的是该协议 的各个域,如下 图所示:第二部分:PCAP 文件解析1、 pcap 解析工具 XplicoXplico 是一个从 pcap 文件中解析出 IP 流量数据的工具,可解析每个邮箱 (POP, IMAP, 和 SMTP 协议), 所有 HTTP 内容, VoIP calls (SIP) 等等2、 C 语言实现 PCAP 文件分析实现步骤:1)用 Wireshark 软件抓包得到 test.pcap 文件2)程序:分析 pcap 文件头 -> 分析 pcap_pkt 头 -> 分析帧头 -> 分析 ip 头 -> 分析 tcp 头 -> 分析 http 信息#include#include#include#include#include#define BUFSIZE 10240#define STRSIZE 1024typedef long bpf_int32;typedef unsigned long bpf_u_int32;typedef unsigned short u_short;typedef unsigned long u_int32;typedef unsigned short u_int16;typedef unsigned char u_int8;//pacp 文件头结构体struct pcap_file_header{bpf_u_int32 magic; /* 0xa1b2c3d4 */u_short version_major; /* magjor Version 2 */u_short version_minor; /* magjor Version 4 */bpf_int32 thiszone; /* gmt to local correction */bpf_u_int32 sigfigs; /* accuracy of timestamps */bpf_u_int32 snaplen; /* max length saved portion of each pkt */bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */};//时间戳struct time_val{long tv_sec; /* seconds 含义同 time_t 对象的值 */long tv_usec; /* and microseconds */};//pcap 数据包头结构体struct pcap_pkthdr{struct time_val ts; /* time stamp */bpf_u_int32 caplen; /* length of portion present */bpf_u_int32 len; /* length this packet (off wire) */};//数据帧头typedef struct FramHeader_t{ //Pcap 捕获的数据帧头u_int8 DstMAC[6]; //目的 MAC 地址u_int8 SrcMAC[6]; //源 MAC 地址u_short FrameType; //帧类型} FramHeader_t;//IP 数据报头typedef struct IPHeader_t{ //IP 数据报头u_int8 Ver_HLen; //版本 +。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


