Wireshark文件pcap的格式详细解析有实例(Global Header、Packet Header)

前言

毕设做的是流量的预处理方面的东西,处理的文件都是pcap文件,在处理的过程中需要对文件进行裁剪、剪切等工作,提取出需要的信息,所以一定得对pcap文件的数据结构很了解。下面就根据其他资料来学习总结一下pcap的文件格式,并举出实例来进行学习。

pcap文件格式

pcap文件数据结构如下图所示,每个pcap文件都是由Global Header、Packet Header、Packet Data三部分组成,文件的初始位置为Global Header,接着都是成对出现的Packet Header和Packet Data,下面分别对这三个部分进行逐步介绍。

Global Header

Global Header长度为24字节,下面的代码就是wireshark官网所给出的pcap文件的Global Header的数据结构定义,我们按照一个一个进行分析。

typedef struct pcap_hdr_s {
        guint32 magic_number;   /* magic number */
        guint16 version_major;  /* major version number */
        guint16 version_minor;  /* minor version number */
        gint32  thiszone;       /* GMT to local correction */
        guint32 sigfigs;        /* accuracy of timestamps */
        guint32 snaplen;        /* max length of captured packets, in octets */
        guint32 network;        /* data link type */
} pcap_hdr_t;
  • magic_number:翻译过来是魔数,表示用于检测文件格式本身和字节顺序。32bit,4字节
  • version_major,version_minor:此文件格式的主次版本号。各自16bit,2字节
  • thiszone:表示在格林威治标准时间(UTC)和下列包头时间戳的本地时区之间以秒为单位改正时间。举个例子,例如:如果时间戳是GMT (UTC),那么这个值就是0。如果时间戳是在中欧时间(阿姆斯特丹,柏林,…),即格林尼治标准时间+ 1点,这个区域必须是-3600。实际上,时间戳总是用GMT表示的,所以这个区域总是0。32bit,4字节
  • sigfigs:从理论上讲,时间戳捕捉的准确性,一般情况下都是置0
  • snaplen:捕获的“快照长度”(通常为65535或更多,但可能受到用户的限制),请参见下面的incl_len与orig_len。这个
  • network:链路层报头类型,在包的开头指定报头的类型(如1为以太网,详见tcpdump.org的链路层报头类型页面);
    这可以是各种类型的,如802.11,802.11与各种无线电信息,PPP,令牌环,FDDI等。

看不懂没关系,我们接下来举例说明,可以看出用wireshark打开和16进制打开后文件的文件截图如下,用白色框出来的24字节就是GlobalHeader,而红色框标出来的是Packet Header,这个后面会讲到,接下来我们把这些信息对应上:

  • magic_number:d4c3 b2a1,注意这里说明了这个文件实际读取是按照a1b2c3d4的方式读取的,是按照字节数从后往前读取。待会儿举例就可以看到了
  • version_major:0200
  • version_minor:0400
  • thiszone:0000 0000
  • sigfigs:0000 0000
  • snaplen:0000 0400
  • network:0100 0000

 Global Header相对于Packet Header来说不是很重要,因为这和我们一般所关心的数据报文也就是Packet Data基本上是没多大关系的,下面我们就学习一下Packet Header

Pcaket Header

Packet Header的数据结构定义如下,总长度是16字节。

typedef struct pcaprec_hdr_s {
        guint32 ts_sec;         /* timestamp seconds */
        guint32 ts_usec;        /* timestamp microseconds */
        guint32 incl_len;       /* number of octets of packet saved in file */
        guint32 orig_len;       /* actual length of packet */
} pcaprec_hdr_t;
  • ts_sec:捕获此包的日期和时间。该值以秒为单位,自1970年1月1日00:00:00 GMT;这也称为UN*X time_t。32bit,4字节
  • ts_usec:在常规pcap文件中,捕获此包的微秒数,作为ts_sec的偏移量,也就是在不足一秒的时间的微秒值,32bit,4字节
  • incl_len:实际捕获并保存在文件中的数据包数据的字节数。这个值不应该大于orig_len或全局头文件的snaplen值。32bit,4字节
  • orig_len:数据包被捕获时在网络上出现的长度。如果incl_len和orig_len不同,则实际保存的包大小受到snaplen的限制。32bit,4字节

   在刚才的图中,红色圈出来的就是Packet Data,首先我们将这些信息对应上,然后进行详细讲解。

  • ts_sec:5696 b65c,表示捕获此数据包的时间,我们将这个16进制的秒数转化为10进制,然后转换为实际时间,在上面我已经提到由于魔数规定的原因,实际进行进制转换计算值的时候应该是按照字节数逆序读取,也就是5cb69656,转换为10进制的结果为:1555469910,接着讲这个Unix时间戳转换为北京时间可以算出北京时间为2019/4/17 10:58:30,待会儿我们看wireshark显示的结果就可以进行验证。
  • ts_usec:2471 0300,实际值为00037124,转换为10进制结果为225572,也就是0.225572秒。
  • incl_len:4900 0000,实际值49,转换为10进制结果为73,也就是实际捕获的数据包长度为148字节。
  • orig_len:4900 0000,数据包被捕获时在网络上出现的长度,也是148字节。

   接下来我们对上面的计算结果进行验证。从下图可以看出,白色框和红色框圈出来的分别为Global Header和Packet Header,从2247 da61对照wireshark打开的就可以知道接下来的是Packet Data,可以看到图中wireshark黄色框圈出来的显示是这个包网络上是73字节,实际抓取到72字节,到达时间是2019/4/17 10:58:30.225572000,也就是1555469910.225572000秒,这与上面我们计算的值一致。

Packet Data

packet data就是我们一般软件打开能够也能直观看到的数据报文,数据的数据格式也会不同,例如这是一个tcp协议的报文数据。下面做一个简单介绍,详细信息还是建议参考其他文章。

  • 最前面的Ethernet II中表示的数据是源MAC地址和目的MAC地址以及上一层使用哪个ip协议,例如ipv4或者ipv6。
  • Internet Protocol Version 4的数据则为ip的报头数据,包括源IP,目的IP等等。
  • Transmission Control Protocol则为tcp协议的报头数据,包括源端口号,目的端口号等等。

 

 

 

 

参考文献

[1] https://wiki.wireshark.org/Development/LibpcapFileFormat#File_Format

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Wireshark是一个流行的网络协议分析工具,它允许用户捕获和分析网络数据包。PCAP文件Wireshark使用的一种数据格式,用于存储捕获到的网络数据包。PCAP文件格式具体说明了文件的结构和存储方式,以便于其他工具或程序能够正确地解析和处理这些文件PCAP文件由全局文件头(Global Header)和数据包头(Packet Header)组成。全局文件头记录了文件的版本信息、网络接口类型等元数据。每个数据包都由数据包头和数据包负载组成。数据包头包含了数据包的时间戳、数据包长度等信息。 要解析PCAP文件,可以借助Wireshark软件本身或者使用编程语言中的相关库,如libpcap或WinPcap。在Java程序中,可以使用WireShark库进行解析,并在后台查看PCAP包的内容。 PCAP文件解析的过程包括读取PCAP文件的全局文件头,然后逐个读取数据包头和数据包负载,以提取所需的信息。例如,可以通过解析数据包头中的时间戳和源/目的IP地址来分析网络流量的来源和目标。 总结起来,Wireshark可以使用PCAP文件解析网络数据包。PCAP文件的结构和格式可以通过参考了解。在Java程序中,可以使用WireShark库进行解析,并在后台查看PCAP包的内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Wireshark文件pcap格式详细解析实例Global HeaderPacket Header)](https://blog.csdn.net/Hollake/article/details/90108950)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [借助WireShark解析PCAP包](https://blog.csdn.net/q35222806/article/details/78817811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值