【问题标题】:How to programmatically create a new VPN interface with Android 4.0?如何使用 Android 4.0 以编程方式创建新的 VPN 接口?
【发布时间】:2012-02-13 20:10:39
【问题描述】:

我想知道是否可以使用 Android 4.0 中的新 VPN API 以编程方式创建 VPN 接口。我查看了http://developer.android.com/resources/samples/ToyVpn,但这是关于创建一个完整的 VPN 客户端来处理连接等。我只想添加一个新的 VPN 配置并可能删除现有的配置。

有很多这样的问题,但它们似乎都是 4.0 之前的。我知道以前这是不可能的,但人们会认为新的 VPN API 提供了这样的功能。那么有没有人找到一种方法来做到这一点,还是仍然不可能?如果有办法,请指点我正确的方向。

【问题讨论】:

    标签: android vpn android-4.0-ice-cream-sandwich


    【解决方案1】:

    这似乎是通过 com.android.settings.vpn2.VpnDialog (及相关)类在内部处理的,这些类基本上执行KeyStore.getInstance().put("VPN_[VPN ID]", [encoded VpnProfile object]>) - 然后会导致文件名称为“/data/misc/vpn/ 1000_VPN_[VPN ID]" 被创建(其中 1000 显然是系统进程 ID)。

    使用反射(或访问隐藏/内部 API 的黑客之一)您可以自己执行此操作,但由于您的进程不会作为系统进程运行,因此系统 VPN 浏览器将看不到它们。

    但是,根据这个 (http://code.google.com/p/android/issues/detail?id=8915),至少有一个应用程序可以在没有根手机的情况下执行此操作,但源似乎不可用......所以也许有一些方法可以做到这一点我不知道——如果有的话我肯定会感兴趣的。

    附: - 这是另一个类似的问题(虽然它专门询问使用有根设备):Create VPN profile on Android

    【讨论】:

    • 我会接受这个答案,因为它很好地总结了我在测试和调查平台源代码时发现的内容。要访问文件系统级别的 VPN 配置文件,您需要 root 权限。出于同样的原因,我认为反射黑客也行不通。到目前为止,我发现的所有 VPN 应用程序都使用一些本地数据库来存储 VPN 配置。如果确实有一个应用程序可以在非 root 手机上运行并使用设备的 VPN 配置,我会非常感兴趣。
    • 我刚刚更新了答案,其中包含指向 Google 代码票证的链接,在该链接中我读到了关于应该执行此操作的应用程序的评论 (code.google.com/p/android/issues/detail?id=8915)。我仍然很怀疑,但可能值得研究一下,因为似乎所有其他路径都会导致死胡同。
    【解决方案2】:

    是的,有办法。使用 AndroidVpnService,它可以帮助您在设备上创建 VPN 接口,存在以编程方式配置的方法。

    【讨论】:

    • 什么方法,请把这个完整一点。
    猜你喜欢
    • 2012-06-05
    • 2010-09-24
    • 2015-10-26
    • 2018-12-07
    • 2014-04-26
    • 2012-07-17
    • 2011-03-16
    • 2011-10-27
    • 2013-04-25
    相关资源
    最近更新 更多