pcap

义项:数据包捕获文件格式
pcap

pcap是libpcap函数库用于把抓取到的网络数据包写入文件的一种二进制文件格式,通常以 .pcap 为扩展名[1]。它由一个记录整体参数的文件头和紧随其后的逐包记录串组成,结构简单,被tcpdump、Wireshark等大量抓包与分析工具共同支持[2]。由于缺乏多接口与注释等能力,其后继格式pcapng在2009年前后出现,但pcap至今仍是分发抓包数据时最通用的容器[3]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

pcap是一种按抓包时间顺序保存原始网络帧的文件格式,由libpcap函数库定义,文件名通常以 .pcap 结尾[1]。它本身不规定数据包内部如何编码,只负责把链路层开始的一整段字节原样装进容器,帧的解析方式取决于文件头中记录的链路类型编号[4]。

文件由两大部分构成:开头是一个固定长度的全局文件头,描述版本、时间戳精度、快照长度和链路类型等整体参数;其后是数量不定的包记录,每条记录都带一个较短的包头,再跟上该帧被保存下来的字节。链路类型编号由IETF下的登记项统一分配,以太网对应编号 1,无线局域网、PPP 等封装各有独立取值[5]。

原理

文件头共 24 字节,依次为 4 字节魔数、各 2 字节的主次版本号、4 字节时区修正、4 字节时间戳精度、4 字节快照长度以及 4 字节链路类型等字段,当前格式的主版本号为 2、次版本号为 4[6]。其中时区和精度两个字段在实践里基本固定写 0,快照长度则限定单帧最多保留的字节数,超出部分在写盘时被截断[6]。

魔数是识别格式的关键,写入端按本机字节序把 0xA1B2C3D4 写进文件;读取端若读到的字节序列与之相反,就说明文件来自相反字节序的机器,后续所有整数都需要交换[7]。若使用纳秒精度,魔数改为 0xA1B23C4D,读取端据此判断时间戳低位是微秒还是纳秒[7]。

每条包记录前有 16 字节包头:4 字节秒值、4 字节秒的小数部分、4 字节实际保存长度、4 字节原始帧长度[1]。秒值是从 1970 年 1 月 1 日 00:00:00 UTC 起算的 32 位无符号整数;两个长度字段不一致,即表明该帧在采集时被快照长度截短[2]。包记录之后不补齐到 4 字节边界,因此下一条记录的位置只能靠已知长度顺序推算[2]。

发展历程

抓包工具tcpdump与其底层库libpcap最早于 1987 年前后由 Van Jacobson 在劳伦斯伯克利实验室开发,随工具一起流出的文件写入方式逐渐成为事实上的存放标准[3]。此后将近十年,该格式没有正式的规范文本,各种实现只以源码中的结构体定义为准[3]。

随着网络规模扩大,单文件头、单链路类型的限制逐渐显现,2009 年前后出现了分块组织的后继格式pcapng,由Wireshark读写支持,libpcap 起初只能读取[3]。2010 年代后期,IETF 的运维与安全管理工作组开始为旧格式补写规范文本,草案把pcap定性为历史格式,说明其字段含义不再扩充[2]。

应用

该格式最主要的用途是保存采集现场,供事后离线分析,tcpdump、Wireshark 等工具都可用它作为输入与输出[8]。在协议开发与排障中,分析者先抓取流量写入文件,再用解析工具逐层查看链路帧、IP 首部、传输层首部直至应用层数据[9]。

由于结构简单,各种语言都容易自行编写读写器,嵌入式项目也会用它把设备流量直接送入图形分析工具[10]。不少移动端与专利文献也采用该格式归档网页访问过程的原始报文,便于从中提取源地址、目的地址与时间信息[11]。

局限

一个文件只能记录一种链路类型,接口描述也只有编号而无名称、IP 地址等信息,多网卡或隧道混合采集难以在同一文件里表达。文件头里也没有注释、采集程序版本、操作系统等上下文,这些信息只能另附文本保存[12]。

全文件只有一个文件头,因此不能简单地把两个文件首尾相接,拼接后的第二段头部会被当作数据解析[3]。经典布局的时间戳精度虽有纳秒变体,但精度声明写在文件级而不能逐接口调整;包记录间不做对齐,也不便于按索引随机跳读[2]。此外,并非所有具备多接口特性的pcapng文件都能无损转换回该格式[13]。

参见

  • pcapng —— 采用分块结构、支持多接口与注释的后继捕获文件格式

  • libpcap —— 定义并实现该格式读写的抓包函数库

  • tcpdump —— 最早使用该格式保存流量的命令行抓包工具

  • Wireshark —— 可读取该格式并逐层解析协议的可视化分析软件

  • 链路层 —— 文件中每帧数据起始处的封装层次,决定解析起点

参考资料

  1. Network Working Group [引用日期2026-10-29]
  2. PCAP Capture File Format [引用日期2026-10-29]
  3. PCAP and PCAPng [引用日期2026-10-29]
  4. Crate pcap_parser Copy item path - §PCAP and PCAPNG parsers [引用日期2026-10-29]
  5. draft-ietf-opsawg-pcap-00 [引用日期2026-10-29]
  6. Parsing a .pcap file in plain C [引用日期2026-10-29]
  7. pcap [引用日期2026-10-29]
  8. [工具使用]Wireshark(上) [引用日期2026-10-29]
  9. pcap文件分析 [引用日期2026-10-29]
  10. pcap_out [引用日期2026-10-29]
  11. google.com 上的网页 [引用日期2026-10-29]
  12. pcap与pcapng格式深度解析:网络抓包文件的选择、转换与实战指南 [引用日期2026-10-29]
  13. tencent.cn 上的网页 [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:44:54Z

历史版本

本条目引用的词条
libpcap IETF pcapng tcpdump Wireshark 链路层