字节序(Endianness)
🔢 多字节数据在内存中的存放顺序。r0capture 拼 pcap 包时必须正确处理。
两种字节序
| 字节序 | 说明 | 高位字节在 |
|---|---|---|
| 大端序(Big-Endian,网络序) | 高位字节在低地址 | 前 |
| 小端序(Little-Endian,本机序 x86) | 低位字节在低地址 | 前 |
以 0x12345678 为例:
大端序内存: 12 34 56 78 (高位12在前)
小端序内存: 78 56 34 12 (低位78在前)r0capture 中的字节序
| 区域 | 字节序 | struct 首字符 | 原因 |
|---|---|---|---|
| pcap 全局头 + 记录头 | 本机序(小端) | = | 全局头 magic 0xa1b2c3d4 声明了本机序 |
| IPv4 / TCP 协议头 | 大端(网络序) | > | 网络协议规定用大端 |
magic number 的字节序作用
pcap 全局头第一个字段是 magic 0xa1b2c3d4。读端读这 4 字节:
- 读到
a1 b2 c3 d4→ 写端是大端 - 读到
d4 c3 b2 a1→ 写端是小端
读端据此判断整个文件的字节序。r0capture 用本机序(小端)写 magic,Wireshark 读到 d4 c3 b2 a1 即知是小端。
IP 地址的流转
详见 ipToNumber。