问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

网络抓包文件格式(.pcap/.cap)剖析

创作时间:
作者:
@小白创作中心

网络抓包文件格式(.pcap/.cap)剖析

引用
CSDN
1.
https://m.blog.csdn.net/m0_37710388/article/details/89217421

pcap文件是常用的数据报存储格式,可以理解为就是一种文件格式,只不过里面的数据是按照特定格式存储的,所以我们想要解析里面的数据,也必须按照一定的格式。普通的记事本打开pcap文件显示的是乱码,用Ultra Edit能够以16进制数据的格式显示,用wireshark这种抓包工具就可以正常打开这种文件,愉快地查看里面的网络数据报了,同时wireshark也可以生成这种格式的文件。当然这些工具只是我经常使用的,还有很多其它能够查看pcap文件的工具。

.pcap/.cap文件结构

  1. Pcap Header
    文件头,每一个pcap文件只有一个文件头,总共占24字节,以下是总共7个字段的含义。
  • Magic(4B):标记文件开始,并用来识别文件和字节顺序。值可以为0xa1b2c3d4或者0xd4c3b2a1,如果是0xa1b2c3d4表示是大端模式,按照原来的顺序一个字节一个字节的读,如果是0xd4c3b2a1表示小端模式,下面的字节都要交换顺序。现在的电脑大部分是小端模式。

  • Major(2B):当前文件的主要版本号,一般为0x0200

  • Minor(2B):当前文件的次要版本号,一般为0x0400

  • ThisZone(4B):当地的标准事件,如果用的是GMT则全零,一般全零

  • SigFigs(4B):时间戳的精度,一般为全零

  • SnapLen(4B):最大的存储长度,设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将值设置为65535

  • LinkType(4B):链路类型。解析数据包首先要判断它的LinkType,所以这个值很重要。一般的值为1,即以太网

    常用的LinkType(链路类型):

    类型描述
    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
  1. Packet Header
    数据包头可以有多个,每个数据包头后面都跟着真正的数据包。以下是Packet Header的4个字段含义
  • Timestamp(4B):时间戳高位,精确到seconds,这是Unix时间戳。捕获数据包的时间一般是根据这个值

  • Timestamp(4B):时间戳低位,能够精确到microseconds

  • Caplen(4B):当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。

  • Len(4B):离线数据长度,网路中实际数据帧的长度,一般不大于Caplen,多数情况下和Caplen值一样

  1. Packet Data
    Packet是链路层的数据帧,长度就是Packet Header中定义的Caplen值,所以每个Packet Header后面都跟着Caplen长度的Packet Data。也就是说pcap文件并没有规定捕获的数据帧之间有什么间隔字符串。Packet数据帧部分的格式就是标准的网络协议格式了。

实际示例

下图为16进制pcap文件:

备注:

  • 红色部分:Pcap Header
  • 蓝色部分:Packet Header

PcapHeader

  • Magic(4B): D4 C3 B2 A1
    表示小端模式,后面的字节从后往前读;

  • Major(2B): 02 00
    ,计算机读的是 00 02;

  • Minor(2B): 04 00
    ,计算机读的是 00 04;

  • ThisZone(4B): 00 00 00 00
    ,全零;

  • SigFigs(4B): 00 00 00 00
    ,全零;

  • SnapLen(4B):FF FF 00 00, 计算机读的是:00 00 FF FF,所以是2^16-1=65535

  • LinkType(4B):01 00 00 00, 计算机读的是:00 00 00 01,表示是以太网类型

Packet Header

  • Timestamp(4B): CA 4D A4 5C
    ,计算机读的是:5C A4 4D CA,十进制:1554271690,日期为:2019-04-03 14:08:10;

  • Timestamp(4B): 4F 2A 08 00
    ,计算机读的是:00 08 2A 4F,十进制:535119,代表535119ms;

  • Caplen(4B): BA 1C 00 00
    , 计算机读的是:00 00 1C BA,十进制:7354,代表后面的7354个字节为一个数据帧,之后又是一个新的PacketHeader,如此循环;

  • Len(4B): BA 1C 00 00
    ,和Caplen相同

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号