Skip to content

为什么手造 pcap ​

📄 r0capture 手动构造 pcap 包而非用 scapy/pyshark 的设计原因。

常规做法 vs r0capture ​

做法工具代价
常规scapy / pyshark 构造包引入大依赖,慢
r0capturestruct.pack 手拼零依赖,快

r0capture 的选择 ​

r0capture 不依赖 scapy,直接用 Python 标准库 struct 拼 pcap:

python
# 全局头
pcap_hdr = struct.pack('=IHHiIII', 0xa1b2c3d4, 2, 4, 0, 0, 65535, 228)
# 记录头
rec_hdr = struct.pack('=IIII', ts_sec, ts_usec, incl_len, orig_len)
# IPv4 头
ip_hdr = struct.pack('>BBHHHBBHII', 0x45, 0, total_len, ...)
# TCP 头
tcp_hdr = struct.pack('>HHLLBBHHH', src_port, dst_port, seq, 0, 0x5018, ...)
# 载荷
data

为什么能省略 ​

r0capture 抓的是应用层明文,不需要真实网络层的:

  • 以太网帧头(pcap 用 LINKTYPE_IPV4 跳过)
  • TCP 三次握手(假包不模拟)
  • TCP 真实 seq/checksum(填假值,Wireshark 容错)

只要 src/dst addr+port 真实 + 载荷正确,Wireshark "Follow TCP Stream" 就能重组明文。

好处 ​

  1. 零依赖:只要 Python 标准库,部署简单
  2. 快:struct.pack 极快,抓包不阻塞
  3. 可控:每字段都自己定,便于调试
  4. 小:不引入 scapy 数 MB 依赖

代价 ​

  • pcap 里 seq/checksum 是假的,Wireshark 显示警告(不影响明文查看)
  • 没有完整握手,不能看 TCP 状态机

但对"看明文"这个目标,这些都无所谓。

相关文档 ​

基于 VitePress 构建 · 教学用途