2

我一直在解析网络以寻找在 Android 上创建 VPN 客户端的方法。我似乎找不到任何关于如何做到这一点的好资源。

目标是,我希望能够使用 Android 中的内置 VPN 功能(可能以编程方式添加新连接)或其他方式设置 VPN。

我确实在文档中遇到过,VpnService但不清楚如何使用它。有没有人有这样做的一个很好的例子,这可能与此时的Android SDKas 一样吗?

4

1 回答 1

2

Android 提供了一个示例代码ToyVpn,您可以根据需要查看和重用逻辑。


这是文档中的一些详细信息

此类中有两个主要方法:prepare(Context) 和 VpnService.Builder.establish()。前者处理用户操作并停止由另一个应用程序创建的 VPN 连接。后者使用提供给 VpnService.Builder 的参数创建一个 VPN 接口。应用程序必须调用 prepare(Context) 来授予使用该类中其他方法的权利,并且可以随时撤销该权利。以下是创建 VPN 连接的一般步骤:

  1. 当用户按下按钮进行连接时,调用 prepare(Context) 并启动返回的 Intent(如果非空)。

  2. 当应用程序准备就绪时,启动服务。

  3. 创建到远程服务器的隧道并协商 VPN 连接的网络参数。

  4. 将这些参数提供给 VpnService.Builder 并通过调用 VpnService.Builder.establish() 创建一个 VPN 接口。

  5. 在隧道和返回的文件描述符之间处理和交换数据包。

  6. 调用 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>
于 2018-06-28T15:17:40.667 回答