PCAPdroid 中文文档 下载 App

PCAPdroid 的 VpnService 原理 — 免 root 抓包的技术基础

核心思路

PCAPdroid 之所以能做到免 root 抓包,完全依赖 Android 系统提供的 VpnService API。这项 API 的设计初衷是让正规 VPN 客户端在不需要 root 的情况下建立 VPN 隧道,但 PCAPdroid 巧妙地把它用作了本地流量过滤器。

简单来说:PCAPdroid 创建一个虚拟的网络接口(不是真的 VPN),把设备上所有应用发出的流量都引到这个接口上,在本地完成处理后再原样转发出去。整个过程流量只在设备内部走,没有任何数据离开设备。

它是怎么工作的

  1. 第一次启动时,Android 会弹出系统级的 VPN 确认对话框
  2. 用户确认后,PCAPdroid 以服务身份在后台持续运行
  3. 系统把所有出站流量路由到 PCAPdroid 创建的虚拟接口
  4. PCAPdroid 在自己的代码里逐包检查、记录、可选地解密和修改
  5. 处理完的流量再被发往真正的目标服务器

为什么系统允许这样做

Android 7.0 之后加强了隐私保护,但 VpnService 仍然是系统认可的合法 API。任何应用只要声明了相应权限并通过系统对话框获得用户同意,就可以在本地处理流量。系统强制弹出对话框就是为了让用户知情。

PCAPdroid 首次启动就必须经过这一步,没有任何办法静默跳过。

能力边界

理解 VpnService 原理后,就能清楚 PCAPdroid 哪些能做、哪些做不到:

与 root 模式的对比

VpnService 模式最大优点是不破坏设备、不需要 Magisk,适合不想折腾 root 的用户。Root 模式则能绕过 VpnService 的全部限制,做到真正的网卡级抓包,但需要完整 root 环境(Magisk + Zygisk + App 列表绕过)。两种模式在同一个 PCAPdroid 安装包中,根据设备是否有 root 来显示对应开关。

<img src="images/main-screen.png" alt="PCAPdroid 主界面" title="PCAPdroid 主界面" />