Frage an vpn, android, android-4.0-ice-cream-sandwich – Richten Sie eine VPN-Verbindung programmgesteuert auf Android 4.0 ein

22

Ich arbeite programmgesteuert daran, eine VPN-Verbindung auf Android-Geräten einzurichten. Ich war erfolgreich in der Lage, dies für Geräte mit OS 2.3.5 und früher zu tun (ich habe Reflektion verwendet, um zu den versteckten Klassen zu gelangen). Aber mit Android 4.0 haben sie die alten Klassen entfernt und verwenden stattdessen die VPNService-Klasse.

Ich dachte, der beste Startpunkt wäre, das mitgelieferte ToyVPN-Beispiel für Android zu verwenden, aber ich stehe damit vor einer Menge Herausforderungen. Im Beispielcode mussten sie nur die Serveradresse senden:

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

Und dann den VPN-Tunnel durch Öffnen des Kanals erstellt:

tunnel = DatagramChannel.open();

Aber in meinem Fall muss ich die Serveradresse, den Benutzernamen und das Passwort senden. Bisher habe ich nicht herausgefunden, wie das geht. Meine beste Vermutung war, so etwas zu machen:

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

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

        tunnel = DatagramChannel.open();

Das hat aber nicht geklappt. also was ich frage ist:

Gibt es eine andere als die in ToyVpn verwendete Möglichkeit, programmgesteuert eine VPN-Verbindung herzustellen?Wenn nicht, wie sende ich die Anmeldeinformationen, wenn ich eine Verbindung zum Server herstellen möchte?

Bearbeiten

Ich habe vergessen zu erwähnen, dass ich den VPN-Typ angeben muss (PPTP, L2TP, L2TP / IPSec PSK oder L2TP / IPSec CRT).

@ Ahmad, hast du eine Lösung gefunden? Ich brauche auch die Lösung user6689631
Ich suche auch die Antwort auf diese Fragen, können Sie bitte Ihre Ergebnisse teilen blackfyre
@ kh_4 Findest du eine Lösung dazu? Kristiyan Varbanov
Ich interessiere mich auch für Lösung user2934930

Deine Antwort

2   die antwort
3

Es gibt eine Möglichkeit, eine VPN-Verbindung programmgesteuert einzurichten. Vielleicht möchten Sie einen Blick darauf werfenOpenVPN für Android (ics-openvpn) Quelle des Projekts. Wenn Ihre App die Verbindung nicht direkt herstellen muss, können Sie auch Absichten verwenden, um eine Verbindung über ics-openvpn herzustellen. OpenVPN bietet eine Vielzahl von Einstellungen, aber Sie müssen immer noch prüfen, ob es mit Ihrem Server kompatibel ist.

Die in Android 4.0 (ICS) eingeführte VpnService-Klasse kann nur einige Einstellungen vornehmen, z. B. das Erstellen der Netzwerkschnittstelle (nur Tun-Modus), einige Routen und DNS-Server. Es wird weiterhin benötigt, damit Ihre App ohne Root-Berechtigung eine Verbindung herstellen kann. Vielleicht möchten Sie das überprüfenHier Weitere Informationen zur Verwendung von VpnService.

Soweit ich den Code von ics-openvpn untersucht habe, integriert die App eine OpenVPN-Binärdatei, die in der APK der App ausgeführt werden kann. Die App führt diese Binärdatei aus und sendet und empfängt Befehle über einen lokalen Socket. Die Binärdatei erledigt fast alles. Sie müssen nur die Eingaben analysieren, um zu wissen, welche Methoden von VpnService.Builder Sie aufrufen und welche Informationen Sie über den Socket zurücksenden (einschließlich Bestätigungen, Konfigurationsdateien, Anmeldeinformationen, bytecounts) , usw)

8

Grundsätzlich können Sie die in Android 4.0+ eingeführte VPN-API nur implementierendein eigenes VPN-Implementierung. Sie müssen lediglich das Linux TUN-Gerät öffnen und den Dateideskriptor an Sie weitergeben sowie die von Ihnen bereitgestellten Routen / DNS-Server / usw. einrichten. Die gesamte Implementierung des VPN-Protokolls liegt ausschließlich bei Ihnen.

Die kurze Antwort lautet also: nein. Sie können nicht verwendendie VPN-API eines der

PPTP, L2TP, L2TP / IPSec PSK oder L2TP / IPSec CRT

VPN-Verbindungen, es sei denn, Sie führen eine eigene Implementierung der genannten VPN-Typen durch.

Abgesehen davon können Sie dennoch versuchen, eine Absicht zu übertragen, um Ihren Benutzer zur Aktivität der System-VPN-Einstellungen zu bringen und ihn aufzufordern, das VPN manuell zu konfigurieren / zu starten.

Oh und noch etwas hinzuzufügen. Zum Zeitpunkt des Schreibens dieses Dokuments bietet der neueste DevicePolicyManager von Android (API-Stufe 21) bereits FunktionenUnterstützung für die Bereitstellung von WLAN-Einstellungen. Ich persönlich würde vermuten, dass Google weitere hinzufügen könnteAndroid für die Arbeit Funktionen, zu denen möglicherweise die von Ihnen benötigte Unterstützung für die VPN-Bereitstellung gehört.I / O 2015 ist nur noch ein paar Tage entfernt, also lass uns abwarten ...

Verwandte Fragen