Вопрос по android – Установить VPN-соединение программно на Android 4.0

22

Я работаю над программной настройкой VPN-подключения на устройствах Android. Я успешно смог сделать это для устройств, использующих ОС 2.3.5 и ранее (я использовал отражение, чтобы добраться до скрытых классов). Но с Android 4.0 они избавились от старых классов и вместо этого используют класс VPNService.

Я подумал, что для начала лучше всего использовать предоставленный Android пример ToyVPN, но я столкнулся с множеством проблем. В примере кода им нужно было только отправить адрес сервера:

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

А затем создал VPN-туннель, открыв канал:

tunnel = DatagramChannel.open();

Но в моем случае мне нужно отправить адрес сервера, имя пользователя и пароль. До сих пор я не понял, как это сделать. Моим лучшим предположением было сделать что-то вроде этого:

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

    try {
        // Create a DatagramChannel as the VPN tunnel.

        tunnel = DatagramChannel.open();

Но это не сработало. поэтому я спрашиваю:

Is there a way, other than what's used in ToyVpn, to create a VPN connection programmatically? If not, how do I send the credentials when I want to establish a connection to the server?

Edit

Я забыл упомянуть, что мне нужно указать тип VPN (PPTP, L2TP, L2TP / IPSec PSK или L2TP / IPSec CRT).

Нет, к сожалению, я так и не нашел решения для этого. Ahmad
я также заинтересован в решении user2934930
Когда-нибудь находили решение? Oh Danny Boy
все еще нет решения? TharakaNirmana
Я также ищу ответ на эти вопросы, не могли бы вы поделиться своими выводами blackfyre

Ваш Ответ

2   ответа
3

вы захотите взглянуть наOpenVPN для Android (ics-openvpn) источник проекта. Если вашему приложению не нужно устанавливать соединение напрямую, вы также можете использовать намерения для запуска соединения из ics-openvpn. OpenVPN предлагает широкий спектр настроек, но вам все еще нужно проверить, совместим ли он с вашим сервером.

Класс VpnService, представленный в Android 4.0 (ICS), может выполнять только некоторые настройки, такие как создание сетевого интерфейса (только режим настройки), некоторые маршруты и DNS-серверы. По-прежнему необходимо, чтобы ваше приложение могло подключаться без разрешения root. Вы можете проверитьВот для получения дополнительной информации о том, как использовать VpnService.

Насколько я исследовал код ics-openvpn, приложение интегрирует исполняемый двоичный файл OpenVPN в APK приложения. Приложение выполняет этот двоичный файл, отправляя и получая команды через локальный сокет. Бинарный файл заботится почти обо всем, вам просто нужно проанализировать входные данные, чтобы узнать, какие методы VpnService.Builder вы будете вызывать, и какую информацию вы будете отправлять обратно через сокет (это включает в себя подтверждения, файлы конфигурации, учетные данные, bytecounts. , так далее)

8

По сути, API VPN, представленный в Android 4.0+, позволяет реализовать толькоyour own Внедрение VPN. Это не более чем открытие устройства Linux TUN и передача вам дескриптора файла, а также настройка маршрутов / DNS-серверов / и т. Д., Которые вы указали. Вся реализация протокола VPN зависит только от вас.

Итак, короткий ответ: нет. Вы не можете использоватьthe VPN API установить любой из

PPTP, L2TP, L2TP/IPSec PSK or L2TP/IPSec CRT

VPN-соединения, если вы не внедрите собственную реализацию упомянутых типов VPN.

При этом вы все равно можете попытаться передать Намерение, чтобы привести вашего пользователя к активности настройки системы VPN, и попросить его вручную настроить / запустить VPN.

Ох, и еще одна вещь, чтобы добавить. На момент написания этой статьи последняя версия Android DevicePolicyManager для Android (уровень API 21) уже предоставляетПоддержка настроек WiFi, Я бы лично предположил, что Google может продолжать добавлять большеAndroid для работы функции, которые могут включать необходимую вам поддержку VPN.I / O 2015 это всего лишь несколько дней, так что давайте подождем и посмотрим ...

Похожие вопросы