pcap 全局头 (PCAP Header)
📄 pcap 文件的第一个 24 字节全局头。
结构
r0capture 用 struct.pack('=IHHiIII', ...) 写全局头(24 字节,本地端序):
| 偏移 | 字段 | 类型 | r0capture 值 | 含义 |
|---|---|---|---|---|
| 0 | magic | uint32 | 0xa1b2c3d4 | 魔数 + 端序标志 |
| 4 | version_major | uint16 | 2 | 主版本 |
| 6 | version_minor | uint16 | 4 | 次版本 |
| 8 | thiszone | int32 | 0 | 时区(不用) |
| 12 | sigfigs | uint32 | 0 | 时间精度(不用) |
| 16 | snaplen | uint32 | 65535 | 最大抓包长度 |
| 20 | network | uint32 | 228 | 链路类型 (LINKTYPE_IPV4) |
magic 的端序作用
0xa1b2c3d4 写出后:
- 小端机(ARM/x86):字节序
d4 c3 b2 a1 - 大端机:字节序
a1 b2 c3 d4
Wireshark 读首 4 字节判断端序。r0capture 在小端 Android 上写,故 pcap 是小端格式。
network = 228
228 = LINKTYPE_IPV4:告诉 Wireshark pcap 里每个包从 IPv4 头开始(没有链路层/以太网头)。这正合适——r0capture 直接造 IPv4+TCP 包。
只写一次
全局头在整个 pcap 文件开头只写一次,之后全是记录头+包数据。