Root 模式抓包 — 绕过 VpnService 直接从网卡抓真实包
和 VpnService 模式的区别
| VpnService 模式(默认) | Root 模式 | |
|---|---|---|
| 是否需要 root | ❌ | ✅ |
| 原理 | 在应用内代理流量 | 直接在网卡级抓原始包 |
| 能同时跑其他 VPN | ❌ 冲突 | ✅ 可以 |
| TLS 解密 | ✅ 完整支持 | ❌ 不支持(无 SOCKS5 代理) |
| 包格式 | 统一 PCAP,去掉二层头 | 真实二层头,需要 Pcapng 格式存方向 |
| DoH 域名可见 | ✅ 阻断 DoH 即可 | ❌ DoH 域名不可见 |
| 广播/组播流量 | 可能方向错位 | 部分应用场景下方向错位 |
什么时候用 Root 模式
- 你已经在用其他 VPN 应用(Orbot、WireGuard 等),VpnService 模式下两个 VPN 不能共存
- 你需要抓真实的物理网卡包(比如分析二层头、以太网报)
- 你想做 VpnService 模式抓不到的场景(某些系统级流量被 VpnService 漏掉)
- 你有完整 Magisk root 环境且知道自己在做什么
启用步骤
- 设备已 root(Magisk 是最常见方案)
- 在 Magisk 里不要 Hide PCAPdroid——Root 模式需要检测到 root 才能显示开关
- PCAPdroid 设置里找到 Root Capture 区域,打开开关
- 第一次启动抓包时,Magisk 会弹出超级用户请求,点授权
- PCAPdroid 会以 root 身份 spawn 一个守护进程负责抓包,停止抓包后守护进程自动退出
自动网卡选择
和普通 tcpdump 需要手动指定网卡不同,PCAPdroid Root 模式自动探测设备当前的对外接口(wlan0 / p2p0 / rmnet_data0 等),并在网络切换(WiFi ↔ 4G)时自动切换抓包接口。
⚠️ 注意事项
- Root 模式下 TLS 解密不可用——因为 SOCKS5 代理不工作,mitmproxy 拿不到流量
- Root 模式下 DNS 通过 DoH 查询的域名不可见——需要关闭/阻断 DoH
- Root 模式下防火墙不可用
- Root 模式下某些短连接的 UID 会被报成"未知",可能导致 App 过滤时漏掉这些连接
- 包方向可能被交换——Root 模式下用 PCAP 格式保存时,加载回去 Source/Destination 可能对调。建议用 Pcapng 格式(付费功能),它专门处理了方向信息
没有 root 的替代方案
- 如果只是想同时跑 Orbot + PCAPdroid,可以用 Orbot Proxy Mode(不是 VPN Mode)配合 PCAPdroid 的 SOCKS5 代理设置——不需要 root
- 如果只是想抓物理网卡流量,可以考虑用 USB 调试配合 tcpdump + adb pull,但操作繁琐