PCAP(packet capture)格式

article/2025/9/23 20:32:27

PCAP(packet capture)格式

文章目录

  • PCAP(packet capture)格式
    • 定义
    • pcap文件的格式
      • 文件头24 Bytes 各字段的含义:
        • 常用链路类型
      • 实际pcap文件的文件头
      • Packet Data
    • 综述
    • wireshark添加 lua plugins解析pcap
      • 脚本存放位置
      • sudo 打开wireshark
      • 查看pcap数据
        • 时间戳解析
    • 参考文章

定义

The Packet Capture library provides a high level interface to packet capture systems. All packets on the network, even those destined for other hosts, are accessible through this mechanism. It also supports saving captured packets to a savefile, and reading packets from a savefile.

pcap是一种常用的存储数据报文的文件格式,里面的数据按照特定格式存储的,通常就是链路层的数据帧,可以存储Ethernet帧IPv4结构数据IPv6结构数据、TCP格式数据UDP格式数据等。

pcap文件的格式

 文件头   24字节数据报头 + 数据报 数据包头为16字节,后面紧跟数据报数据报头 + 数据报 ......

pcap.h里定义了文件头的格式

struct pcap_file_header {bpf_u_int32 magic;u_short version_major;u_short version_minor;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_*) */
};

文件头24 Bytes 各字段的含义:

header fieldsizeexplain
Magic4Bpcap文件标识。标记文件开始,并用来识别文件和字节顺序。值可以是 0xa1b2c3d4 或者 0x4dc3b2a1,如果是 0xa1b2c3d4 表示是大端模式,按照原来的顺序一个字节一个字节的读,如果是 0x4dc3b2a1 表示小端模式,下面的字节要交换顺序。现在电脑大部分是小端模式
Major2B主版本号 #define PCAP_VERSION_MAJOR 2,一般为0x0200
Minor2B次版本号 #define PCAP_VERSION_MINOR 4,一般为0x0400
ThisZone4B当地的标准事件,如果用的是 GMT 则全零,一般全零
SigFigs4B时间戳的精度,一般为全零
SnapLen4B抓包最大长度。如果要抓全,设为0x0000ffff(65535),
tcpdump68B-s 0就是设置这个参数,缺省为68字节
LinkType4B链路类型。一般都是1:ethernet,即以太网常用的 LinkType(链路类型)

常用链路类型

类型含义
0BSD loopback devices, except for later OpenBSD
1Ethernet, and Linux loopback devices
6802.5 Token Ring
7ARCnet
8SLIP
9PPP
10FDDI
100LLC/SNAP-encapsulated ATM
101“raw IP”, with no link
102BSD/OS SLIP
103BSD/OS PPP
104Cisco HDLC
105802.11
108later OpenBSD loopback devices (with the AF_value in network byte order)
113special Linux “cooked” capture
114LocalTalk

实际pcap文件的文件头

|    magic    |major  | minor |   thiszone  |   sigfigs   |   snaplen   |  linktype   |
| d4 c3 b2 a1 | 02 00 | 04 00 | 00 00 00 00 | 00 00 00 00 | ff ff 00 00 | 01 00 00 00 |

红色方框为Pcap Header,红色红线为Packet Header

Pcap Header的Magic:d4 c3 b2 a1,表示是小端模式,后面的字节从后往前读 a1b2c3d4 小端模式

Pcap Header的Major:02 00,计算机读的应该是00 02。

最大存储长度SnapLen:ff ff 00 00 ,正常就是00 00 ff ff,所以是2的16次方减一,是65535个字节。

LinkType:01 00 00 00 ,实际是00 00 00 01,是以太网类型。

Packet Header: 时间戳秒数:61DE82DE,换算成十进制为1641972446,微妙数为0000399C,即14748,合并起来时间戳为1641972446.14748;

后面两个数000004E4,即caplen为1252字节

查看每一帧报文数据,与文件头中caplen大小一致。

Packet Data

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

具体每个报文结构可查看参考文章中《pcap/cap 文件格式》

综述

  1. pcap文件头:数据链路层14 Bytes 数据包头+20 Bytes IP数据包头+20 Bytes TCP数据包头或者UDP数据包头;

  2. 目的MAC(6 Bytes)+源MAC(6 Bytes)+type(2 Bytes,0800,IP)+协议版本及头长度(0×45,1 Bytes)+区分服务(1 Bytes)

+总长度(2 Bytes)+唯一标示(2 Bytes)+标志与偏移量(2 Bytes)+TTL(1 Bytes)+协议(1 Bytes,TCP|UDP)+校验和(2 Bytes)

+源IP地址(4 Bytes)+目的IP地址(4 Bytes)+源端口(2 Bytes)+目的端口(2 Bytes)+序列号(4 Bytes)+确认号(4 Bytes)+头长度(1 Bytes)+ack标志(1 Bytes)+窗口大小(2 Bytes)+校验和(2 Bytes)+紧急数据偏移量(2 Bytes)

wireshark添加 lua plugins解析pcap

如果已知Packet Data数据结构,可以编写好解析的lua脚本,加载到wireshark中,从而可以在打开pcap文件的同时,直接解读数据内容。

脚本存放位置

/usr/lib/x86_64-linux-gnu/wireshark/plugins

sudo 打开wireshark

qiancj@qianchengjun:~$ sudo wireshark

查看 Help --> About Wireshark

Plugins选项卡中可以看到加载的 lua 脚本

查看pcap数据

加载任意pcap文件

可以看到wireshark data数据中数据包的头被解析出来了

时间戳解析

时间秒数为00 00 62 ff 65 15 , 小数部分为后面的4字节00 02 da 3f

秒数所有字节转换为十进制就是1660904725,小数部分所有字节转换为十进制就是186943

通过在线时间戳转换工具转换即可得到真实时间:2022-8-19 18:25:25,时区以格林尼治时间为标准的,所以东八区时间减去8小时,真实时间为2022-8-19 10:25:25

参考文章

  • pcap文件的格式:http://blog.chinaunix.net/uid-30280182-id-5208298.html
  • pcap 文件格式–转载: http://blog.chinaunix.net/uid-29119135-id-3853961.html
  • pcap/cap 文件格式: https://zhuanlan.zhihu.com/p/394946101
  • pcap库中每个函数的具体使用方法,可参考PCAP(3PCAP) MAN PAGE : https://www.tcpdump.org/manpages/pcap.3pcap.html
  • pcap解析工具及录包工具wireshark的使用,以及相关editcap、mergecap、randpkt、text2pcap的命令使用参考WireShark官网: https://wiki.wireshark.org/Tools

http://chatgpt.dhexx.cn/article/YGuZcZ6P.shtml

相关文章

Pcap文件详解

Pcap文件详解 一、简介 pcap文件是常用的数据报存储格式,可以理解为就是一种文件格式,只不过里面的数据是按照特定格式存储的,所以我们想要解析里面的数据,也必须按照一定的格式。 普通的记事本打开pcap文件显示的是乱码&#…

Pcap 数据包捕获格式详解

Pcap 是 Packet Capture 的英文缩写,是一种行业标准的网络数据包捕获格式。如果你是网络开发人员,那么通常会使用 Wireshark、Tcpdump 或 WinDump 等网络分析器捕获 TCP/IP 数据包,而抓包后存盘的文件格式就是 .pcap 文件。 文件格式 Pcap …

MySQL - 多表查询与案例详解

目录 多表查询概述 内连接 外连接 1). 左外连接 2). 右外连接 自连接 联合查询 子查询 标量子查询 列子查询 行子查询 表子查询 多表查询练习 隐式内连接 显式内连接 去重distinct 左外连接 between ... and ... 三表查询 函数AVG 标量子查询 命名引用 多表查询概述 分…

MySQL数据库多表查询

MySQL数据库多表查询 前言 在之前的文章MySQL数据库之SQL入门中,我们讲到了四类SQL中的DQL(数据库查询语言,用于查询表中数据),但是我仅仅用DQL去查询一张表中数据,而在实际的应用中,经常是对多张数据库表进行查找。…

Oracle多表查询

什么是多表查询 多表查询:当查询的数据并不是来源一个表时,需要使用多表链接操作完成查询。根据不同表中的数据之间的关系查询相关联的数据 多表链接方式 内连接(inner join) 连接两个表,通过相等或不等判断链接列&…

(八)多表查询

目录 多表查询 笛卡尔积的错误 连接条件 表的别名 多表查询分类 自连接 和 非自连接 内连接 和 外连接 SQL92 SQL99 UNION的使用 UNION操作符 UNION ALL操作符 7种SQL JOINS的实现 QL99语法新特性 自然连接 USING连接 多表查询 多表查询,也称…

6、多表查询

第06章_多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了…

【MySQL】多表查询方法

目录 多表关系 多表查询之笛卡尔积 多表查询分类 连接查询 内连接 外连接 自连接 子查询 标量子查询 列子查询 行子查询 表子查询 联合查询 多表关系 一对多(多对一):员工与部门,一个部门可以对应多个员工一般在多的…

【MySQL】多表查询

首先,为了方便说明问题,创建两个表emp(雇员信息)和dept(雇员部门信息),其数据如下: 在之前的博客中,我们分享了单表查询的方法,但是在实际应用中&#xff…

mysql 多表查询

一、概念 多表查询也叫关联查询, 其就是指 一次性查询多张表,并且将每张表得到的数据联系作为查询结果 二、关键字 当我们需要一次查询两张表时,如果使用: select * from employees,departmaents; 这样的话会出现笛卡尔积错误 (笛卡尔积错…

数据库-MySQL-多表查询(总结)

目录 前言 多表查询概述 多表查询分类 1、连接查询 2、子查询 内连接 内连接查询语法 案例演示 外连接 外连接查询的语法 案例演示 联合查询-union,union all 子查询 概念 分类 标量子查询 自连接 自连接查询语法 案例演示 子查询 列子查询 行子查询 表子…

多表查询(整理)

一、多表关系 概述:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间互相关联,所以各个表结构之间也存在着各种联系。 基本上有三种:…

mybatis多表查询

目录 前言 一、Mybatis多表查询 2.一对一查询(多对一) 2.2 一对多查询 2.3 多对多查询 2.4 知识小结 前言 mybatis初学者记录每日学习日常 提示:以下是本篇文章正文内容,下面案例可供参考 一、Mybatis多表查询 内连接、左外连…

多表查询(连接查询)

在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询最终需要查询的数据来源于不同的表中时,这个时候需要考虑使用连接查询 新建一张员工表 -- emp drop t…

数据库高级——多表查询

多表查询 多表查询有如下几种: 合并结果集:union、union all连接查询: 2.1. 内连接:inner join on 2.2. 外连接:outer join on – 左外连接:left outer join – 右外连接:right outer join 2.…

MySQL多表查询

文章目录 一、什么是多表查询1、概述2、笛卡尔积现象 二、多表查询的分类1、等值连接 vs非等值连接2、自连接 vs 非自连接3、内连接 vs 外连接4、满外连接(FULL OUTER JOIN) 三、UNION[ALL]的使用四、7种SQL JOINS的实现 一、什么是多表查询 1、概述 多…

【MySQL】多表查询策略(多表联查子查询)

目录 一、MySQL多表查询 二、准备工作 1.运行环境 2.创建公司表 3.创建员工表 三、多表查询 (一)多表联查—同时查询多张表 1.联结 2.左连接 3.右连接 4.内连接 (二)子查询 1.SELECT子查询 2.WHERE子查询 3.FROM子…

MySQL----多表查询

MySQL----多表查询 多表关系表与表之间的联系:一对多(多对一)多对多一对一 多表查询多表查询的分类数据准备内连接外连接自连接联合查询子查询标量子查询列子查询行子查询表子查询 多表查询案例 多表关系 在进行数据库表结构的设计时,会根据业务的需求和…

SQL语句多表查询

多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键&a…

十、多表查询

十、多表查询 *多表查询的本质就是把多张表合并成一个临时表 1、多表数据合并方案 连接查询合并方案【最常见】 首先确保两张表之间存在【隶属关系】将两张表中的数据行【沿着水平方向进行拼接】最终得到一个拥有【完整隶属关系】的新数据行 联合查询合并方案 不需要两张表之…