首页 > 解决方案 > 关于Android理解VpnService代码的问题

问题描述

我一直在学习 Android VpnService,我在 Github https://github.com/M66B/NetGuard/#netguard中找到了一个使用名为 NetGuard 的 VpnService 构建网络防火墙的好项目。我已阅读 ServiceSinkhole 中的代码,但我仍然无法理解如何在代码中阻止 Internet 访问?你能告诉我在哪里可以找到代码中的阻塞方式吗?谢谢!

标签: android

解决方案


“阻止互联网访问”到底是什么意思?我建议您阅读VpnServiceVpnService.Builder类的(综合)文档,其中解释了如何使用提供的 API 设置 VPN 隧道。设置好 VPN 后,您基本上可以“挂钩”到 Android 设备的网络流量,因此您完全负责哪些出站数据包离开设备,以及哪些入站数据包传送到应用程序。换句话说,你可以使用这个钩子随意丢弃数据包,从而“阻止互联网访问”。这个“钩子”是调用返回的文件描述符VpnService.Builder.establish()

[...] 该接口适用于 IP 数据包,并返回一个文件描述符供应用程序访问它们。每次读取都会检索一个路由到接口的传出数据包。每次写入都会注入一个传入数据包,就像从接口接收到的数据包一样。[...]

本质上,要阻止应用程序的 Internet 访问,只需避免将其出站数据包写入 VPN 隧道(从文件描述符读取出站数据包),避免将其入站数据包写入文件描述符(从 VPN 隧道读取入站数据包) )。


推荐阅读