当前位置: 首页 > 知识库问答 >
问题:

如何在Android上以编程方式配置VPN?

易修洁
2023-03-14

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

>

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

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

  • 共有1个答案

    汪翰墨
    2023-03-14

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

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

    这提供了一个您完全控制的潜在VPN解决方案(服务器也是开源的),但它不是PPTP或IPSec。如果您了解PPTP协议,那么应该可以将其用作实现此类VPN客户端模型

    2) 是的,在早期版本中,唯一的方法是通过私有API。事实上,即使您希望在更高版本中使用内置的VPN支持(即内置的PPTP或IPSec支持),也必须利用这些隐藏的API。也许可以使用底层linux内核在较低的级别上实现这一点,但这需要在操作系统上生根并绕过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(需要传递到API的PPTP概要文件对象示例)

    如何使用Android 4.0以编程方式创建新的VPN接口?(说明如何在系统上存储此新VPN配置文件)

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

     类似资料:
    • 问题内容: 我正在动态创建按钮。我首先使用XML设置了样式,然后尝试使用下面的XML使其具有程序性。 这是我到目前为止所拥有的。除了可绘制对象,我可以做所有事情。 问题答案: 你可以使用该方法执行此操作。请参阅此处的示例。我在不使用的情况下使用了它,并且效果很好。你可以尝试任何一种方式。 更新:如果链接断开,请在此处复制代码 要么 要么

    • 我正在尝试使用设置log4j2以写入日志。我希望以编程方式配置日志记录系统,而不是使用XML文件。 以下是我尝试过的内容(大部分与网站上的文档相同)https://logging.apache.org/log4j/2.x/manual/customconfig.html#Configurator): 我在main方法的开头调用方法。当我运行我的程序时,会创建一个名为的文件,但是所有日志输出都会转到

    • 问题内容: 我在4.4.2上,尝试通过uri删除文件(图像)。这是我的代码: 目前,这些删除功能均未真正删除文件。我的AndroidManifest.xml中也有此代码: 问题答案: 您为什么不使用以下代码对此进行测试: 我认为问题的一部分是您永远不要尝试删除文件,而只是创建一个具有方法调用的变量。 因此,在您的情况下,您可以尝试: 但是我认为这有点过分。 您添加了一条注释,说明您正在使用外部目录

    • 问题内容: 如何以编程方式设置媒体播放器的音量。我将其用于警报通知。非常感谢您的任何帮助,并在此先感谢。 问题答案: 使用 AudioManager ,您可以简单地控制媒体播放器的音量。 也来自MediaPlayer(但我没有尝试过) 由于:API级别1 设置此播放器的音量。建议使用此API来平衡应用程序中音频流的输出。除非您正在编写用于控制用户设置的应用程序,否则应优先使用此API来代替setS

    • 我在logback.xml中定义了一个logback appender,它是一个DB appender,但是我想知道是否有任何方法可以使用我自己定义为bean的连接池在java中配置appender。 我发现了类似的事情,但从来没有真正的答案。

    • 在这里,我尝试使用Bluetooth classic连接两个android设备,并通过HFP模式转接电话。 如果设备A有来电,我需要通知设备B并从设备B侧接受/拒绝,甚至需要从设备B侧通话。 我在蓝牙配置中从源端进行了更改,以在设备B中为HFP配置文件启用A2DP接收器和HF角色(禁用AG角色)。 我对AT命令的工作原理感到困惑。我必须通过输出流传递AT命令(蓝牙经典连接)。 仅仅传递AT命令(根