我一直在解析网络,以寻找在Android上创建VPN客户端的方法。我似乎找不到任何有关如何执行此操作的好资源。
目标是,我希望能够使用Android中的内置VPN功能(可能以编程方式添加新连接)或其他方式来设置VPN。
我确实在文档中遇到了VpnService
,但不清楚如何使用它。有人有这样做的好例子吗?目前Android SDK
可以做到这一点吗?
答案 0 :(得分:1)
Android提供了一个sample code ToyVpn,您可以根据需要查找和重用逻辑。
此类中有两个主要方法:prepare(Context)和VpnService.Builder。Establishment()。前者处理用户操作并停止由另一个应用程序创建的VPN连接。后者使用提供给VpnService.Builder的参数创建VPN接口。应用程序必须调用prepare(Context)来授予使用此类中其他方法的权利,并且该权利可以随时撤销。以下是创建VPN连接的一般步骤:
当用户按下按钮进行连接时,调用prepare(Context)并启动返回的意图(如果非null的话)。
准备好应用程序后,启动服务。
创建到远程服务器的隧道并协商VPN连接的网络参数。
将这些参数提供给VpnService.Builder并通过调用VpnService.Builder。Establishment()创建VPN接口。
在隧道和返回的文件描述符之间处理和交换数据包。
在调用onRevoke()时,关闭文件描述符并正常关闭隧道。
扩展此类的服务需要使用适当的权限和意图过滤器声明。它们的访问必须由Manifest.permission.BIND_VPN_SERVICE权限保护,并且它们的意图过滤器必须与SERVICE_INTERFACE操作匹配。这是在AndroidManifest.xml中声明VPN服务的示例:
<service android:name=".ExampleVpnService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService"/>
</intent-filter>
</service>