Skip to content

pcap 全局头字段 ​

📋 pcap 文件全局头(24 字节)每个字段的含义。

全局头结构 ​

r0capture 在 ssl_log 里写 pcap 全局头:

python
for writes in (
    ("=I", 0xa1b2c3d4),  # Magic number
    ("=H", 2),           # Major version
    ("=H", 4),           # Minor version
    ("=i", time.timezone),  # GMT correction
    ("=I", 0),           # Timestamp accuracy
    ("=I", 65535),       # Snap length
    ("=I", 228)):        # Data link type
    pcap_file.write(struct.pack(writes[0], writes[1]))

字段详解 ​

偏移长度格式值含义
04=I0xa1b2c3d4Magic number + 字节序标记
42=H2主版本
62=H4次版本(即 pcap 2.4)
84=itime.timezoneGMT 到本地时区偏移秒数
124=I0时间戳精度(0=微秒)
164=I65535单包最大保存长度
204=I228Data link type(228=LINKTYPE_IPV4)

Magic Number ​

0xa1b2c3d4 是 pcap 的身份证:

  • 写端用本机序写,小端机写出 d4 c3 b2 a1
  • 读端读前 4 字节判断字节序:
    • a1 b2 c3 d4 → 写端大端
    • d4 c3 b2 a1 → 写端小端

r0capture 在 x86(小端)上运行,写出 d4 c3 b2 a1,Wireshark 据此判定小端。

228 = LINKTYPE_IPV4:告诉读端,每条记录体直接就是 IPv4 包(无以太网头)。这与 log_pcap 拼的「IPv4头+TCP头+载荷」结构对应。

为什么不用以太网头

r0capture 造的是假包,没必要加 14 字节以太网头(还要编 MAC 地址)。直接从 IPv4 开始更简洁,linktype 228 正是为此设计。

Snap Length ​

65535:单包最大保存长度。r0capture 不截断包,明文多大写多大(受限于这个上限)。

相关文档 ​

基于 VitePress 构建 · 教学用途