Я работаю над программным настройкой 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();
Но это не сработало. поэтому я спрашиваю:
- Есть ли способ, отличный от того, что используется в ToyVpn, для программного создания VPN-соединения?
- Если нет, как мне отправить учетные данные, когда я хочу установить соединение с сервером?
Edit
Я забыл упомянуть, что мне нужно указать тип VPN (PPTP, L2TP, L2TP/IPSec PSK или L2TP/IPSec CRT).