2.2 pcapng 与证据保管:解剖捕获文件本身


2.2 pcapng 与证据保管:解剖捕获文件本身

采集下来的文件本身就是一件标本。本节把捕获文件摆上解剖台:pcap 的 24 字节全局头长什么样、pcapng 的块结构解决了什么问题、时间戳精度藏在哪里,以及 capinfos、editcap、mergecap 这三件整备工具怎么用。这是 1.3 节"取证案"的核心技能,也是第 8 章处理大文件前的必修课。

容器解剖:先看老格式 pcap

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 的块结构

pcapng 不再是"一个头管到底",而是块(block)的序列,每块自带类型、长度和循环校验:

容器解剖:pcapng 的块结构

看一份 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 秒,重传会被看成正常、正常会被看成超前响应。

证据保管四原则

  1. 原件只读:所有过滤、切分、导出都在副本上进行,原件的校验值记录在案。
  2. 环境随行:采集人、时间、点位、接口、捕获过滤、丢包统计,六项写进随附记录,pcapng 的选项字段能装下一部分。
  3. 格式优先 pcapng:新采集一律 pcapng,历史 pcap 保持原样不转存(转存会重算时间戳精度)。
  4. 敏感内容隔离:明文密码、令牌可能就躺在载荷里,文件的访问权限按密码库的标准管理——第 6 章展开红线。

capinfos 深读:一份数据里挖出的全部事实

把 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 秒教训)——同步没保障时,宁可分开着,也别合并出一条"假时间轴"。

结案要点

  • pcap 头 24 字节自查:魔数判字节序,snaplen 判断是否截尾采集。
  • pcapng 三大改进:多接口 IDB、可声明的时间戳分辨率、自描述环境与块级校验。
  • capinfos 是每份文件的第一道手续,editcap 切、mergecap 合,构成证据整备三板斧。
  • 跨点位合并先对表:时钟不同步,时间轴就是谎言。

容器备好,下一节解决"够不着的地方怎么采"——命令行三件套把采集能力部署到任何一台服务器。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U