Pytanie w sprawie android, vpn, android-4.0-ice-cream-sandwich – Ustaw połączenie VPN programowo na Androida 4.0

22

Pracuję nad programowym ustawieniem połączenia VPN na urządzeniach z Androidem. Udało mi się to zrobić dla urządzeń korzystających z systemu operacyjnego 2.3.5 i wcześniejszych (użyłem refleksji, aby dostać się do ukrytych klas). Ale z Androidem 4.0 pozbyli się starych klas i zamiast tego użyli klasy VPNService.

Pomyślałem, że najlepszym miejscem do rozpoczęcia będzie użycie dostarczonego przykładu ToyVPN, ale stoję przed wieloma wyzwaniami. W przykładowym kodzie wystarczyło jedynie wysłać adres serwera:

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

Następnie utworzył tunel VPN, otwierając kanał:

tunnel = DatagramChannel.open();

Ale w moim przypadku muszę wysłać adres serwera, nazwę użytkownika i hasło. Jak dotąd nie wiem, jak to zrobić. Moim najlepszym pomysłem było zrobienie czegoś takiego:

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

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

        tunnel = DatagramChannel.open();

Ale to nie zadziałało. więc pytam:

Czy istnieje sposób, poza tym, co jest używane w ToyVpn, na programowe utworzenie połączenia VPN?Jeśli nie, jak mogę wysłać poświadczenia, gdy chcę nawiązać połączenie z serwerem?

Edytować

Zapomniałem wspomnieć, że muszę określić typ VPN (PPTP, L2TP, L2TP / IPSec PSK lub L2TP / IPSec CRT).

@ kh_4 Czy znajdziesz jakieś rozwiązanie na ten temat? Kristiyan Varbanov
@ Ahad, znalazłeś rozwiązanie? Potrzebuję też rozwiązania user6689631
Czy kiedykolwiek znalazłeś rozwiązanie? Oh Danny Boy
Szukam również odpowiedzi na te pytania, czy możesz podzielić się swoimi odkryciami blackfyre

Twoja odpowiedź

2   odpowiedź
8

iwia tylko wdrożenieTwój własny Implementacja VPN. Nie robi nic więcej, jak tylko otworzyć urządzenie Linux TUN i przekazać Ci deskryptor pliku, a także skonfigurować trasy / serwery DNS / etc. Cała implementacja protokołu VPN zależy wyłącznie od Ciebie.

Krótka odpowiedź brzmi: nie. nie możesz użyćAPI VPN skonfigurować dowolną

PPTP, L2TP, L2TP / IPSec PSK lub L2TP / IPSec CRT

Połączenia VPN, chyba że wprowadzisz własną implementację wspomnianych typów VPN.

Mimo to możesz nadal próbować nadać intencję, aby doprowadzić użytkownika do działania w systemie VPN i poprosić go o ręczne skonfigurowanie / uruchomienie VPN.

I jeszcze jedna rzecz do dodania. W chwili pisania tego tekstu najnowszy DevicePolicyManager dla Androida (poziom API 21) już zapewniaObsługa udostępniania ustawień WiFi. Osobiście zgadnę, że Google może nadal dodawać więcejAndroid do pracy funkcje, które mogą obejmować obsługę udostępniania VPN.I / O 2015 jest tylko kilka dni stąd, poczekajmy i zobaczymy ...

3

ć na toOpenVPN dla Androida (ics-openvpn) źródło projektu. Jeśli nie ma potrzeby, aby aplikacja nawiązywała połączenie bezpośrednio, możesz również użyć intencji do wyzwolenia połączenia z ics-openvpn. OpenVPN oferuje szeroki zakres ustawień, ale nadal musisz sprawdzić, czy jest on zgodny z twoim serwerem.

Klasa VpnService wprowadzona w systemie Android 4.0 (ICS) może wykonywać tylko niektóre ustawienia, takie jak tworzenie interfejsu sieciowego (tylko tryb tun), niektóre trasy i serwery DNS. Aby aplikacja mogła się łączyć bez uprawnień administratora, nadal jest potrzebna. Możesz sprawdzićtutaj aby uzyskać więcej informacji na temat korzystania z VpnService.

O ile zbadałem kod ics-openvpn, aplikacja integruje uruchamiane binarnie OpenVPN w APK aplikacji. Aplikacja wykonuje ten plik binarny, wysyłając i odbierając polecenia za pośrednictwem lokalnego gniazda. Binarny zajmuje się prawie wszystkim, wystarczy przeanalizować dane wejściowe, aby dowiedzieć się, jakie metody VpnService.Builder będziesz wywoływać, oraz jakie informacje będą wysyłane przez gniazdo (w tym potwierdzenia, pliki konfiguracyjne, poświadczenia, liczby bajtów) itp.)

Powiązane pytania