【问题标题】:How to configure VPN programmatically on Android?如何在 Android 上以编程方式配置 VPN?
【发布时间】:2012-05-13 18:11:09
【问题描述】:

我需要实现一个 Android 应用程序,该应用程序允许用户配置 VPN 连接,而无需访问 Android 设备的本机菜单。有了这个我有两个问题:

  1. 在 Android 4.0 +(api 级别 14 及以上)中,我发现有一个名为 VpnService 的新组件,它提供了一个用于创建虚拟网络接口、配置它以及从它拦截/转发包到 VPN 的钩子服务器,但没有像 PPTP 或 IPSec 这样的内置 vpn 协议,只有实现它们的可能性。我的问题是是否有任何现成的解决方案可以让 PPTP 和 IPSec 与 VpnService 一起使用?

  2. 在 Android 的早期版本中,从我目前的发现来看,使用 VPN 的唯一方法似乎是通过包装(使用反射)一些隐藏的 api 来访问和配置设备的内置 vpn 解决方案在 android 中,但这是一个麻烦的解决方案,因为设备需要植根,隐藏的 api 实现也可能因设备和操作系统版本而异。有没有更好的方式以编程方式配置底层 linux 操作系统的内置 VPN?

【问题讨论】:

  • 不,很遗憾我没有
  • 您找到使用 VPNService 的解决方案了吗?我也这样做只是想设置 PPTP VPN 设置...?
  • 从未找到解决方案。

标签: android vpn


【解决方案1】:

1) 我不知道 Android 4.x ICS VpnService 的任何开源 PPTP 或 IPSec 实现。 VpnService 旨在创建自定义协议 VPN 应用程序(理论上可以是 pptp 或 IPSec)。我发现利用这个新 API 的唯一开源实现是 OpenVPN:

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

这提供了一种潜在的 VPN 解决方案,您可以完全控制(服务器也是开源的),但它不是 PPTP 或 IPSec。如果你了解 PPTP 协议,应该可以以此为模型来实现这样的 VPN 客户端。

2) 是的,确实在早期版本中,唯一的方法是通过私有 API。事实上,即使你想在以后的版本中使用内置的 VPN 支持(即内置的 PPTP 或 IPSec 支持),你也必须利用这些隐藏的 API。或许可以使用底层的 linux 内核在较低级别执行此操作,但这需要 root 操作系统并绕过 Android 应用程序范例。这不一定是使用私有 API 的更好选择。

有关如何使用这些 API 配置 VPN 的一些信息:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/net/vpn/PptpProfile.java (PPTP 配置文件对象的示例,需要传递到 API)

How to programmatically create a new VPN interface with Android 4.0?(解释如何在系统上存储这个新的 VPN 配置文件)

我不确定这些 API 的一致性和可靠性如何。我希望它们能够在大多数 Android 设备上工作,因为供应商不太可能重新实现基本的 VPN 实现,尽管他们可能已经添加了自己的。他们还可能更改了启用此类配置文件所需的 API,或扩展了它们的功能。

【讨论】:

  • 我成功打开了隐藏的 API,并在运行 2.3.6 的旧三星 Galaxy Ace 和运行 2.2 的 HTC Legend 上使用 PPTP 设置了有效的 VPN 连接。一旦你了解它,它就没有那么复杂了;)
  • 您好,我找不到这个问题的合适解决方案...抱歉
  • @slott:你能告诉我你是怎么做到的吗
  • 请按照本指南进行操作:devmaze.wordpress.com/2011/01/18/… - 我基于此制作了一个简单的 shell 脚本。如果我再次找到它,我会发布它。
  • 啊 - 似乎我在第 2 步将脚本添加到该页面:) devmaze.wordpress.com/2011/01/18/…
猜你喜欢
  • 2013-12-23
  • 2012-11-22
  • 2018-12-07
  • 2012-06-05
  • 2014-04-26
  • 2015-10-26
  • 2012-07-17
  • 1970-01-01
  • 2013-09-24
相关资源
最近更新 更多