Android:使用VPNService API在Android 4.0中使用自己的VPN连接的示例代码

我是android的新手,我正在尝试以编程方式建立并连接到我们自己的vpn (不是默认的vpn提供者,即PPTPL2TP等,它存在于Android Setting -> Wireless and Networks )。

我的情况是,我有按钮,当我点击按钮时,我需要配置我自己的vpn并且链接(比如www.google.com)应该通过我配置的VPN

有没有示例代码?

我不知道为什么我用Google搜索了一千次,但没有github的搜索 。 现在寻找年龄,我终于find了一个写得很漂亮 。 这段代码非常漂亮,很少见:

https://github.com/hexene/LocalVPN

该项目不使用NDK或任何本机代码,纯粹的java,这使它成为一个简单项目的完美开始(不是它对复杂的项目不好)。 而且工作流程非常简单:

  • 当应用程序发出出站请求(从Android操作系统请求到互联网上的某个服务器)时,请求到达LocalVPNService.class
  • LocalVPNService ,调查TCP / UDP数据包并提取源和目标IP( Packet.class用于此)。
  • LocalVPNService代表启动请求的应用程序建立连接,并在新创建的连接上调用VpnService.protect()以避免循环。
  • 然后将连接传递给处理程序,这些处理程序只是在循环中从/向两个连接传递字节。 UDP / TCP输入/输出的线程在不同的工作类和线程中进行管理。

正如你所看到的,hexene已经完成了所有艰苦的工作和繁重的工作。

上面引用的所有类都可以在projects目录中find。 我快速浏览了github的源代码,这里讨论的工作流程可能不准确。

您可以参考与您的android SDK捆绑在一起的示例应用程序ToyVpn。 所以只需转到样品并参考该应用程序。也可以看到这个

除此之外,您还可以下载Openvpn的源代码。 这是链接

https://github.com/kghost/ics-openvpn

谢谢

OpenSwan解决方案: https ://wiki.strongswan.org/projects/strongswan/wiki/AndroidVPNClient

OpenVPN解决方案: https : //code.google.com/p/ics-openvpn/

这两个都需要Android SDK和NDK 。