pcap
定义
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]。
参见
参考资料
- Network Working Group [引用日期2026-10-29]
- PCAP Capture File Format [引用日期2026-10-29]
- PCAP and PCAPng [引用日期2026-10-29]
- Crate pcap_parser Copy item path - §PCAP and PCAPNG parsers [引用日期2026-10-29]
- draft-ietf-opsawg-pcap-00 [引用日期2026-10-29]
- Parsing a .pcap file in plain C [引用日期2026-10-29]
- pcap [引用日期2026-10-29]
- [工具使用]Wireshark(上) [引用日期2026-10-29]
- pcap文件分析 [引用日期2026-10-29]
- pcap_out [引用日期2026-10-29]
- google.com 上的网页 [引用日期2026-10-29]
- pcap与pcapng格式深度解析:网络抓包文件的选择、转换与实战指南 [引用日期2026-10-29]
- tencent.cn 上的网页 [引用日期2026-10-29]