Skip to content

struct.pack 格式符 ​

🎛️ r0capture 拼 pcap 时用的 struct.pack 格式符速查。

格式符首字符(字节序) ​

字符字节序r0capture 用在
=本机序(x86 小端)pcap 全局头、记录头
>大端(网络序)IPv4 头、TCP 头
<小端(未用)
!大端(同 >)(未用)

类型字符 ​

字符C 类型大小
Bunsigned char1 字节
Hunsigned short2 字节
Iunsigned int4 字节
isigned int4 字节

r0capture 用的组合 ​

格式用途
=I本机序 uint32(pcap magic、长度、时间戳)
=H本机序 uint16(pcap 版本)
=i本机序 int32(时区偏移、actual length)
>B大端 uint8(IPv4 Version+IHL、TTL、Protocol)
>H大端 uint16(端口、Total Length、Flags)
>I大端 uint32(IP 地址、seq、ack)

为什么 =i 和 =I 混用 ​

time.timezone 可能是负数(东区为负),用有符号 =i。actual length 同理用 =i。其余长度用无符号 =I。

示例 ​

python
struct.pack(">I", 0xC0A80101)  # 192.168.1.1 → b'\xc0\xa8\x01\x01'
struct.pack("=I", 0xa1b2c3d4) # magic → 小端机写出 b'\xd4\xc3\xb2\xa1'
struct.pack(">B", 0x45)        # IPv4 Version+IHL → b'\x45'

相关文档 ​

基于 VitePress 构建 · 教学用途