在 android 4.0 上以编程方式设置 *** 连接

Posted

技术标签:

【中文标题】在 android 4.0 上以编程方式设置 *** 连接【英文标题】:Set a *** connection programmatically on android 4.0 【发布时间】:2012-06-05 20:50:46 【问题描述】:

我正在以编程方式在 android 设备上设置 *** 连接。对于使用 OS 2.3.5 及之前的设备,我成功地做到了这一点(我使用反射来访问隐藏类)。但是在 android 4.0 中,他们摆脱了旧的类并改用 ***Service 类。

我认为最好的起点是使用 Android 提供的 Toy*** 示例,但我面临着很多挑战。在示例代码中,他们只需要发送服务器地址:

InetSocketAddress server = new InetSocketAddress(mServerAddress, Integer.parseInt(mServerPort));

然后通过打开通道创建***隧道:

tunnel = DatagramChannel.open();

但就我而言,我需要发送服务器地址、用户名和密码。到目前为止,我还没有弄清楚如何做到这一点。我最好的猜测是做这样的事情:

Authenticator.setDefault(new Authenticator()
        protected PasswordAuthentication getPasswordAuthentication() 
            return new PasswordAuthentication("user","pass".toCharArray());
        );

    try 
        // Create a DatagramChannel as the *** tunnel.

        tunnel = DatagramChannel.open();

但这不起作用。 所以我要问的是:

    除了在 Toy*** 中使用的方法之外,还有其他方法可以以编程方式创建 *** 连接吗? 如果没有,当我想与服务器建立连接时如何发送凭据?

编辑

我忘了提到我需要指定 *** 类型(PPTP、L2TP、L2TP/IPSec PSK 或 L2TP/IPSec CRT)。

【问题讨论】:

我也在寻找这些问题的答案,能否分享一下你的发现 不,遗憾的是我从未找到解决方案。 我也对解决方案感兴趣 @Ahmad,你找到解决方案了吗?我也需要解决方案 @kh_4 你有什么解决办法吗? 【参考方案1】:

基本上,Android 4.0+ 中引入的 *** API 只允许您实施您自己的 *** 实施。它只是打开 Linux TUN 设备并将文件描述符传递给您,以及设置您提供的路由/DNS 服务器/等。整个 *** 协议的实施完全取决于您。

所以简短的回答是:不。您不能使用 *** API 来设置任何

PPTP、L2TP、L2TP/IPSec PSK 或 L2TP/IPSec CRT

*** 连接,除非您自行实施上述 *** 类型。

话虽如此,您仍然可以尝试广播 Intent 以将您的用户带到系统 *** 设置活动并要求他们手动配置/启动 ***。

哦,还有一件事要补充。在撰写本文时,Android 最新的 DevicePolicyManager(API 级别 21)已经提供了WiFi settings provisioning support。我个人猜测 Google 可能会继续添加更多 Android for Work 功能,其中可能包括您需要的 *** 配置支持。 I/O 2015 就在几天后,让我们拭目以待……

【讨论】:

【参考方案2】:

有一种以编程方式设置 *** 连接的方法。您可能想查看Open*** for Android (ics-open***) 项目的源代码。如果您的应用不需要直接建立连接,您还可以使用意图触发来自 ics-open*** 的连接。 Open*** 提供了广泛的设置,但您仍然需要查看它是否与您的服务器兼容。

Android 4.0(ICS)中引入的***Service类只能做一些设置,如创建网络接口(仅限tun模式)、一些路由和DNS服务器。您的应用程序仍然需要能够在没有 root 权限的情况下进行连接。您可能需要查看here 以获取有关如何使用 ***Service 的更多信息。

就我探索 ics-open*** 的代码而言,该应用程序在应用程序的 APK 中集成了一个可运行的 Open*** 二进制文件。该应用程序执行此二进制文件,通过本地套接字发送和接收命令。二进制文件几乎处理所有事情,您只需解析输入以了解您将调用的 ***Service.Builder 的哪些方法,以及您将通过套接字发送回哪些信息(这包括确认、配置文件、凭据、字节数等)

【讨论】:

以上是关于在 android 4.0 上以编程方式设置 *** 连接的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上以编程方式使用 Instagram

在 android 上以编程方式安装 APK

如何在 Android 上以编程方式截取屏幕截图? [复制]

在 Android 上以编程方式关闭应用程序的通知

如何在 Android 上以编程方式关闭 3G/数据?

如何在 Android TV 上以编程方式更改电视频道