IPv4 头字段
📋 r0capture 造的 pcap 包里 IPv4 头(20 字节)每个字段。
IPv4 头结构
log_pcap 写的 IPv4 头:
python
# --- IPv4 头 20字节, 大端序 ---
(">B", 0x45), # Version + IHL
(">B", 0), # Type of Service
(">H", 40 + len(data)), # Total Length
(">H", 0), # Identification
(">H", 0x4000), # Flags + Fragment Offset
(">B", 0xFF), # TTL
(">B", 6), # Protocol
(">H", 0), # Header Checksum
(">I", src_addr), # Source Address
(">I", dst_addr), # Destination Address字段详解
| 偏移 | 长度 | 格式 | 值 | 含义 |
|---|---|---|---|---|
| 0 | 1 | >B | 0x45 | Version(4) + IHL(5) |
| 1 | 1 | >B | 0 | Type of Service / DSCP |
| 2 | 2 | >H | 40+len | Total Length(整个 IP 包长) |
| 4 | 2 | >H | 0 | Identification(分片标识) |
| 6 | 2 | >H | 0x4000 | Flags(DF) + Fragment Offset |
| 8 | 1 | >B | 0xFF | TTL(255 跳) |
| 9 | 1 | >B | 6 | Protocol(6=TCP) |
| 10 | 2 | >H | 0 | Header Checksum |
| 12 | 4 | >I | src_addr | Source Address |
| 16 | 4 | >I | dst_addr | Destination Address |
关键字段
Version + IHL: 0x45
- 高 4 位
4= IPv4 - 低 4 位
5= IHL(Internet Header Length),单位 4 字节,5×4=20字节头
二进制 0100 0101 = 0x45。
Flags: 0x4000
0x4000二进制0100 0000 0000 0000- DF(Don't Fragment)位置 1,不分片
Protocol: 6
| 值 | 协议 |
|---|---|
| 1 | ICMP |
| 6 | TCP ← r0capture 用 |
| 17 | UDP |
Checksum: 0
填 0——Wireshark 不校验造的包也能解析,省去计算校验和的麻烦。
字节序
IPv4 头按网络协议规定用大端序(网络序,>)。详见 字节序。