采集下来的文件本身就是一件标本。本节把捕获文件摆上解剖台:pcap 的 24 字节全局头长什么样、pcapng 的块结构解决了什么问题、时间戳精度藏在哪里,以及 capinfos、editcap、mergecap 这三件整备工具怎么用。这是 1.3 节"取证案"的核心技能,也是第 8 章处理大文件前的必修课。
pcap 是 1990 年代的格式,全局头 24 字节 + 每包一条记录头 + 数据。用十六进制工具看一眼真实文件的头:
$ xxd evidence.pcap | head -3 00000000: d4c3 b2a1 0200 0400 0000 0000 0000 0000 ................ 00000010: 9001 0000 0100 0000 c89d 3b6a 2f7e 0500 ......;j/~..
逐字段解读这 24 字节:开头四字节 d4c3 b2a1 是魔数,字节序反着写正好是 a1b2c3d4——出现反转说明这是小端文件;接着 0200 是主版本号 2,0400 是次版本号 4;中间八个零是时区与精度保留字段(从未被真正使用);9001 0000 是 snaplen,小端读出 0x190 = 400 字节——这份文件当年是截尾采集的;0100 0000 是链路类型 1,以太网。仅凭文件头就能还原采集时的两个关键配置,这就是格式解剖的价值。
pcap 的局限也很明显:单接口假设、时间戳精度写死为微秒、没有采集环境描述。多网卡同步采集、纳秒精度、接口元数据,这些现代需求催生了 pcapng。
pcapng 不再是"一个头管到底",而是块(block)的序列,每块自带类型、长度和循环校验:

看一份 pcapng 的真实开头,注意魔数 0a0d 0d0a:
$ xxd ring0.pcapng | head -2 00000000: 0a0d 0d0a 4c00 0000 4dc3 0200 0000 0100 ....L...M....... 00000010: ffff 0000 0100 0000 4c00 0000 6f8a 0000 ........L...o...
4c00 0000 是块长 0x4C 字节;紧随其后的 IDB 里 ffff 0000 是保留字段,0100 0000 又是链路类型 1。工具会替你解读这一切,但知道结构后,你面对"文件打不开""时间戳看起来不对"时就有排查的方向。
capinfos——验明正身。 拿到任何捕获文件,第一步先跑它:
$ capinfos evidence.pcapng File name: evidence.pcapng File type: Wireshark/... - pcapng File encapsulation: Ethernet Number of packets: 18 k File size: 14 MB Capture duration: 97.42 seconds First packet time: 2026-09-04 10:15:22.331402 Last packet time: 2026-09-04 10:17:00.248711 Data byte rate: 145 kBps Strict time order: True
排障时最常看四行:包数与时长(算密度)、首末包时间(核对故障窗口)、Strict time order(乱序文件会影响两遍解析类分析)。取证时另加一步:对原件计算摘要存档,所有分析只在副本上做。
editcap——裁剪与切分。 去掉含密码的那几十帧、把大文件按包数切开、按时间窗取子集:
# 每十万包切一个文件 $ editcap -c 100000 big.pcapng part_ # 按时间窗截取 10:15 到 10:20 的证据 $ editcap -A "2026-09-04 10:15:00" -B "2026-09-04 10:20:00" big.pcapng window.pcapng # 顺手去掉损坏帧并重算校验 $ editcap -F pcapng dirty.pcapng clean.pcapng
mergecap——合并。 环形文件组滚动出的多个片段,或双点位对表采集的两份文件,合成一份按时间排序的底本:
$ mergecap -w merged.pcapng ring0.pcapng ring1.pcapng ring2.pcapng
⚠️ 合并不同采集点的文件前先确认时钟同步(NTP 偏差最好在毫秒级),否则"对表断案"会得出南辕北驰的结论。两台机器时钟差 2 秒,重传会被看成正常、正常会被看成超前响应。
把 capinfos 的输出逐行读一遍,它是每份陌生文件的"到案登记表":
$ capinfos mystery.pcapng File name: mystery.pcapng File type: Wireshark/... - pcapng File encapsulation: Ethernet Packet size limit: file snaplen 65535 <- 声称全帧,截尾嫌疑排除 Number of packets: 18 k File size: 14 MB Data byte rate: 145 kBps Data packet rate: 188 packets/s <- 平均速率,异常峰值要看 IO 图 Capture duration: 97.42 seconds First packet time: 2026-09-04 10:15:22.331402 Last packet time: 2026-09-04 10:17:00.248711 Strict time order: True <- 乱序文件要警惕多源合并痕迹
七个事实三种用法。验真:首末包时间与声称的采集窗口对不上,文件的来历就有疑问。验收:packet size limit 与案型要求的 snaplen 匹配吗,取证案的全帧要求达标吗。验健康:Strict time order 为 False 的文件,两遍解析类分析与流重组的结论要打问号——它是"多文件手工拼接"或"时钟漂移"的指纹。
**问:pcap 转 pcapng 有必要吗?**没有主动转存的必要——老文件保持原样(转存重算时间戳精度,2.2 节的保管原则);新采集一律 pcapng。工具对两种格式的解析能力没有差别,格式差异只在元数据的丰富度。
问:editcap 按时间切窗,时区写错会怎样?-A/-B 参数按本地时区解释,服务器时区与你的预期差几小时就会切出空文件或错窗。稳妥做法:先 capinfos 看首包时间(它按本地时区显示),照着那个格式写窗口参数。
**问:合并多点位文件,哪个在前有讲究吗?**mergecap 会按时间戳重排,输入顺序不影响结果。真正要管的是各点位时钟的同步精度(前文的 2 秒教训)——同步没保障时,宁可分开着,也别合并出一条"假时间轴"。
容器备好,下一节解决"够不着的地方怎么采"——命令行三件套把采集能力部署到任何一台服务器。