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