非 root 模式抓不到其他设备连进来的入站连接 — NAT 限制
现象
- 你在另一台设备(比如电脑)上 ping 手机
- 或者电脑上访问手机开的热点、或访问手机上运行的 Web 服务器
- PCAPdroid Connections 列表里看不到这些连接
原因
Android 设备几乎总是在 NAT 后面:
- 家用路由器给手机分配的是私有 IP(192.168.x.x / 10.x.x.x / 172.16.x.x)
- 路由器通过 NAT 把手机的私有 IP 映射到公网出口 IP
- 外部网络(包括同一个局域网里的其他设备)想主动连进手机:被路由器的 NAT/防火墙挡住了,根本到不了手机
所以绝大多数环境下手机根本不会收到入站连接——更准确地说,其他设备 ping 你、连你的热点访问,这些包不会经过 VpnService,自然也不被 PCAPdroid 抓到。
例外场景
以下场景下可能有入站连接到达手机(但仍不经过 VpnService):
| 场景 | 说明 |
|---|---|
| 同一局域网 + 端口映射 | 路由器做了端口映射,公网请求到达手机 |
| 移动数据网络 + IPv6 | 某些运营商给手机分配 IPv6 地址,IPv6 没有 NAT,理论上能收到入站 |
| 其他 VPN 应用转发流量 | 比如 Orbot 的桥接模式把流量转发给手机 |
| PCAPdroid 自身的 HTTP Server | 你用 PCAPdroid HTTP Server dump mode 时,电脑访问 PCAPdroid 显示的 URL——这时候电脑发起的请求是手机上的 PCAPdroid 接收的,属于入站 |
如果需要抓这些连接
| 需求 | 可行方案 |
|---|---|
| 抓 PCAPdroid HTTP Server 接收到的请求 | 在电脑上自己跑一个 VpnService(或 Wireshark),在请求发出那一侧抓包 |
| 抓其他 VPN 应用(Orbot 等)的流量 | 用 Root 模式抓包——Root 模式绕过 VpnService 直接从网卡抓,所有流量都能看到 |
| 抓电脑 → 手机的连接 | 在 PCAPdroid 的 SOCKS5 代理或 端口映射规则里显式配置,把入站代理流量也纳入 VpnService 路径 |
总结
VpnService 模式设计之初就是为了监控设备自身发出的出站流量——这也是绝大多数用户关心的场景(哪款 App 偷偷联网、连到了哪些域名、发了什么数据)。入站连接监控属于更高级的调试需求,需要 Root 模式或其他工具配合。