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

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

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

有没有示例代码?

  • Android模拟器的VPN连接失败
  • 如何创buildVPNconfiguration文件并在android中以编程方式连接到它?
  • 检查Android中的VPN连接是否处于活动状态?
  • 现有的VPN应用程序如何在Android 2.0 - 2.3中创build新的configuration文件?
  • 检测来自VPN服务的应用程序请求+数据包阻止
  • 在android 4.0上以编程方式设置VPN连接
  • 以编程方式在Android上创buildVPN
  • 是否有Android的VPN提供者API?
  • 我不知道为什么我用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 。