Программная установка VPN-подключения на Android 4.0

Я работаю над программной настройкой 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();

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

  1. Есть ли способ, кроме того, что используется в ToyVpn, для создания VPN-соединения программным путем?
  2. Если нет, то как мне отправить учетные данные, когда я хочу установить соединение с сервером?

Изменить

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

23
задан ROMANIA_engineer 3 November 2017 в 19:53
поделиться