关于Android了解VpnService代码的问题

时间:2018-05-08 02:53:29

标签: android

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

1 个答案:

答案 0 :(得分:0)

“阻止互联网访问”究竟是什么意思?我建议您阅读VpnServiceVpnService.Builder类的(综合)文档,其中介绍了如何使用提供的API设置VPN隧道。一旦建立了VPN,您基本上就可以“挂钩”Android设备的网络流量,因此您完全负责出站数据包退出设备,以及将入站数据包传递给应用程序。换句话说,您可以使用此挂钩随意丢弃数据包,从而“阻止Internet访问”。这个“钩子”是调用VpnService.Builder.establish()返回的文件描述符:

  

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

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