pcap 记录头字段
📋 pcap 每条记录的记录头(16 字节)字段含义。
记录头结构
log_pcap 每写一个包先写 16 字节记录头:
python
# --- pcap 记录头(Record Header) 16字节, 本机字节序 ---
("=I", int(t)), # Timestamp seconds
("=I", int((t * 1000000) % 1000000)), # Timestamp microseconds
("=I", 40 + len(data)), # Number of octets saved
("=i", 40 + len(data)), # Actual length of packet字段详解
| 偏移 | 长度 | 格式 | 含义 |
|---|---|---|---|
| 0 | 4 | =I | Timestamp seconds:抓包时刻的 Unix 秒 |
| 4 | 4 | =I | Timestamp microseconds:微秒部分 |
| 8 | 4 | =I | Number of octets saved:实际写入的包长 |
| 12 | 4 | =i | Actual length of packet:原始包长 |
时间戳
python
t = time.time()
int(t) # Unix 秒
int((t * 1000000) % 1000000) # 微秒部分(0~999999)Wireshark 据此显示抓包时刻,可分析请求时序。
两个长度字段
| 字段 | 含义 | r0capture 取值 |
|---|---|---|
| octets saved | 实际写入文件的字节数 | 40 + len(data) |
| actual length | 原始包长度 | 40 + len(data) |
两者相同——r0capture 不截断包。真实抓包工具(tcpdump)可能因 snap length 截断,此时 saved < actual。
40 = 20(IP头) + 20(TCP头),加 len(data) 载荷。
字节序
记录头用本机字节序(=),与全局头一致(magic 声明了本机序)。详见 字节序。