pcap文件理解

Pcap文件中是二进制,使用winhex软件,打开是十六进制数,winhex是只有十六进制数,而wireshake自动将pcap中的数据包按照时间顺序将分开并赋予一个No.标号(标号是时间顺序)。

图1 winhex软件打开pcap文件

图2wireshake打开pcap文件

图3pcap包文件格式

Wireshake页面不显示pcap报头和数据报头(点击no.编号出来右下角的十六进制是没有显示pcap报头和数据报头,只显示数据部分)个人理解

下面分别介绍文件头,数据报头,数据这三个部分

1.pcap报头(24字节)

结构体
 sturct pcap_file_header
 {
      DWORD           magic;   标识位:32位的,这个标识位的值是16进制的 0xa1b2c3d4
      DWORD           version_major;主版本号:16位2个字节, 默认值为0x0002。
      DWORD           version_minor;副版本号:16位,默认值为0x0004。
      DWORD           thiszone;区域时间:32位,实际上该值并未使用,因此可以将该位设置为0。
      DWORD           sigfigs;精确时间戳:32位,实际上该值并未使用,因此可以将该值设置为0。
      DWORD           snaplen;数据包最大长度:32位,该值设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将该值设置为65535;
      DWORD           linktype;链路层类型:32位, 数据包的链路层包头决定了链路层的类型。
 }

以下是数据值与链路层类型的对应表
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

pcap报头部分对应图1的第一行和第二行的前半段

图4 winhex软件中的第一个数据包pcap报头部分

2.数据包头

秒计时timestamp):32位,一个UNIX格式的精确到秒时间值,用来记录数据包抓获的时间,记录方式是记录从格林尼治时间的1970年1月1日 00:00:00 到抓包时经过的秒数;
微秒计时timestamp):32位, 抓取数据包时的微秒值。

数据包长度caplen):32位 ,标识所抓获的数据包保存在pcap文件中的实际长度,以字节为单位。

当前数据区的长度即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。对应上文的42 00 00 00)

数据包实际长度len): 所抓获的数据包的真实长度,如果文件中保存不是完整的数据包,那么这个值可能要比前面的数据包长度的值大。对应上文的42 00 00 00)

离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。该文件的第一个数据包的数据包头部分CaplenLen相同)

对应图1的第二行的后半段和第三行的前半段

图5 winhex软件中的第一个数据包数据包头部分

注解:

第一个数据包是42 00 00 00,因为是小端模式,应该是00000042,转化为10进制就是66,wireshake统计的是66,如下图

图6wireshake软件统计的第一个数据包的长度

3.Packet Data 数据

该部分wireshake可以显示

图8wireshake软件中的第一个数据包数据部分

图9wireshake软件统计的第一个数据包的信息

94e6f7表示的目的地址

8c38e0表示的源地址

类型是0800,是ipv4

对应图1的第三行后半段和第四行的部分

以上是数据包共同部分,下面是不同的部分,简单介绍下ipv4,我们展示的第一个数据包也是ipv4

经典的ipv4数据包结构:

version: 占据半个字节(4位),表示IP协议的版本号,占用4位。IPv4和IPv6分别有不同的版本号。

IHL: 占据半个字节(4位),表示IP头部的长度,以32位字为单位,因此需要除以4得到实际长度。通常IPv4的头部长度是20字节,IPv6的头部长度是40字节。

DS字段: 占据一个字节(8位),表示服务类型(Type of Service),用于指示数据包的优先级、延迟、吞吐量等信息。

iplen: 占据两个字节(16位),表示IP数据报总长度,包括IP头部和数据部分。

flag: 占据两个字节(16位),表示标识字段。该字段通常用于数据包的分片和重新组装。在3层对流量进行区分、标记。  (如果数据是基于UDP传输的,因为UDP没有序列号不能进行差错控制,所以需要在IP报文中支持差错控制——要把所有分片的数据进行重组)

通常每发送一份报文该值+1,该值在数据分片时,会复制到每一个片中。所以在重组分片包的时候会观察该值。

把该值相同的分片收集到一起重组。

falg: 占据两个字节(16位),表示标志位。

offset: 占据两个字节(16位),表示片偏移。用于指示分片在原始数据报中的位置。其中高3位用于控制分片的相关操作。高三位是标志位(3位),其他位是分片偏移(13位),高三位:

第一位Bit:R:保留位(Reserved Bit) ——该位一般置位0

第二位BIt:DF:不分片位(Don‘t Fragment)——能否分片位 该位置1(不分片) 置0(分片)

第三位Bit:MF:更多分片位 (More Fragment)——表示是否该报文为最后一片 0表示最后一片 该位置1表示后面还有更多分片

后十三位分片偏移:每一个分片的数据字段偏移原始数据报开始处的位置。

例:原始数据报的数据字段总长为1461bytes,使用TCP传输,对该数据报分片,第一片

的offset字段为0,第二片的offset字段就应该为1460

ttl: 占据一个字节(8位),表示生存时间(Time to Live),用于限制数据包在网络中的生存时间,每经过一个路由器,TTL减1,直到为0时被丢弃。

protocol: 占据一个字节(8位),表示上层协议的类型,例如TCP、UDP或ICMP。范围:1~255

描述上层使用什么协议  Tcp=6   UDP=17   ICMP=1  OSPF=89

checksum: 占据两个字节(16位),表示头部校验和,用于验证IP头部在传输过程中是否出现错误。

src_ip: 占据四个字节(32位),表示源IP地址。

dst_ip: 占据四个字节(32位),表示目标IP地址。

后面的是数据部分

不同协议的数据部分不同:

Osi各层的常见协议:

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值