应用明明被禁止联网,为什么看起来还在联网
NetGuard 的拦截机制是绝对的
NetGuard 对被禁止的应用没有任何例外——所有出站流量都会被拦截。如果一个应用被你设置为禁止 Wi-Fi 和移动数据,它就真的完全无法通过网络通信。
"明明被禁止了还在联网"的感觉,几乎都是以下五种情况造成的假象。
假象一:看到的是本地缓存内容
很多应用会预先把图片、视频、文本内容缓存在本地。即使你禁止了它的联网请求,应用仍然可以显示之前缓存好的内容——看起来像是"还在联网",其实只是显示旧数据。
验证方法:
- 在应用里向下滚动刷新(触发新请求)→ 看刷新是否失败
- 或者关闭 Wi-Fi 和移动数据后再打开应用 → 如果内容还在,说明是缓存
假象二:真正发起联网的是 Play Services,不是应用本身
这是最常见的原因。Android 上绝大多数第三方应用不自己处理推送、广告和后台同步——它们把这些请求委托给 Google Play Services(com.google.android.gms)。
所以场景是:
- 你禁止了微信的联网 → 微信不能自己主动访问网络 ✅
- 但微信设置了"允许推送" → 这个推送通知由 Play Services 接收
- 你没禁止 Play Services → 推送正常到达微信
- 你感觉微信"还在联网" → 其实是 Play Services 在帮它联
解决
如果想彻底不让应用收到推送,必须同时禁止 Play Services。但禁止 Play Services 会导致几乎所有应用的推送全部停摆——见 Play Services 相关页面。
假象三:DNS 流量始终允许
NetGuard 的设计决定了所有 DNS 查询都会被允许——即使域名在 Hosts 里被标记为拦截。原因是 NetGuard 需要先让 DNS 查询完成、拿到"域名 → IP"映射,才能在 IP 层做拦截。
这意味着:
- 你在流量日志里看到被禁止的应用有 DNS 查询记录(绿色 ✅)
- 但后续的 TCP / UDP 连接到这个 IP 会被拦截(红色 ❌)
DNS 本身不消耗太多流量,也不泄露太多信息(只有域名,没有内容),允许 DNS 查询是 NetGuard 工作机制的必需环节。
假象四:流量过滤模式的 DNS 泄漏(已修复)
在较新的 Android 版本上,不启用流量过滤时,被禁止应用的 DNS 查询会被正确拦截。但某些旧版 Android(6.0 以前)有 bug,不启用流量过滤时 DNS 查询会泄漏。
解决:
- 主菜单 → 设置 → 高级选项 → ✅ Filter traffic 开启
- 开启流量过滤后电池消耗略有增加,但 DNS 拦截更彻底
假象五:被禁止的应用发送的"空连接请求"
某些被禁止的应用会持续尝试访问网络——发送连接请求 SYN 包。这些请求会被 NetGuard 的 sinkhole 直接丢弃(被 Android 计入"出站流量"),所以你在:
- Android 系统的流量统计里看到这个应用有少量流量消耗
- NetGuard 的流量日志里看到红色拦截条目
这些不是应用"偷偷联网成功",而是它一直在失败地尝试,尝试的请求包被 NetGuard 丢弃了。
如何真正确认拦截生效
方法一:流量日志
Pro 版:主菜单 → 显示日志 → 搜索目标应用的图标。如果所有条目都是红色禁止,说明拦截生效。
免费版:在应用详情面板里看「访问日志」区域 → 有记录(说明之前联网过)但当前是否还能联网需要看刷新情况。
方法二:实时测试
- 禁止目标应用的 Wi-Fi 和移动数据
- 强制停止目标应用(设置 → 应用 → 强制停止)
- 重新打开目标应用
- 尝试触发联网(刷新页面、加载下一页等)
- 如果看到加载失败、无网络、或一直转圈 → 拦截生效 ✅
方法三:关闭 Wi-Fi 和移动数据
如果应用在关闭 Wi-Fi 和移动数据后仍然能显示新内容,那就是 NetGuard 没生效——或者你看到的是完全本地生成的内容(不需要联网的)。
被禁止的应用真的有绕过方式吗
理论上没有。NetGuard 是通过 Android VpnService 在 OS 层做拦截,比任何应用层的"绕过"都更底层。即使应用内有 VPN 客户端、代理服务器、Tor 客户端——它们的流量也会先经过 NetGuard 的规则引擎。
真正的"绕过"只在以下场景发生:
- Android VPN 实现 bug 导致 NetGuard 规则没正确应用(GrapheneOS / LineageOS 部分构建)
- 应用使用了非标准协议(如某些老 Android 版本的 socket 直接写入)
- 应用运行在 Android 工作资料区(Work Profile)或 Secure Folder 里(NetGuard 不支持这些环境)
为什么 NetGuard 不拦截自己
NetGuard 自身的联网请求不在自己的规则引擎管理范围内。原因:
- 如果 NetGuard 能拦截自己,它就无法把其他应用的流量转发到互联网
- 某些老版本上实现过自拦截,但每个连接都要调用 VpnService.protect() 导致电池消耗翻倍和部分机型崩溃
所以不要在流量日志里惊讶 NetGuard 自己也有联网记录——那是正常的、必需的。