Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Establecer una conexión VPN de forma programática en android 4.0

Estoy trabajando en la programación de establecer una conexión VPN en dispositivos Android. Yo era capaz de hacerlo con éxito para los dispositivos que utilizan OS 2.3.5 y antes (he utilizado la reflexión para llegar a las clases ocultas). Pero con android 4.0 se deshizo de las clases antiguas y utilizar la clase VPNService en su lugar.

Pensé que el mejor lugar para comenzar sería usar el ejemplo de ToyVPN proporcionado por Android, pero estoy enfrentando muchos desafíos con él. En el código de ejemplo solo necesitaban enviar la dirección del servidor:

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

Y luego creó el túnel VPN abriendo el canal:

 tunnel = DatagramChannel.open(); 

Pero en mi caso tengo que enviar la dirección del servidor, el nombre de usuario y la contraseña. Hasta ahora no he descubierto cómo hacerlo. Mi mejor conjetura era hacer algo como esto:

 Authenticator.setDefault(new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("user","pass".toCharArray()); }}); try { // Create a DatagramChannel as the VPN tunnel. tunnel = DatagramChannel.open(); 

Pero esto no funcionó. Así que lo que estoy pidiendo es:

  1. ¿Hay alguna manera, aparte de lo que se utiliza en ToyVpn, de crear una conexión VPN mediante programación?
  2. Si no, ¿cómo envío las credenciales cuando deseo establecer una conexión con el servidor?

Muchas gracias por su ayuda, realmente lo aprecio.

Editar

Olvidé mencionar que necesito especificar el tipo de VPN (PPTP, L2TP, L2TP / IPSec PSK o L2TP / IPSec CRT).

  • Android: Código de ejemplo para usar la conexión VPN propia en Android 4.0 mediante VPNService API
  • ¿Existe una API de proveedor VPN para Android?
  • ¿Cómo configurar VPN de forma programática?
  • Programe PPTP / L2TP VPN de forma programática en Android
  • Cómo conectarse a una VPN, que ya está configurada en un teléfono Android, mediante programación
  • Captura de paquetes de red en Android?
  • ¿Cómo encontrar el estado de la conexión VPN a través de API de marco o cualquier otro método eficiente?
  • ¿Cómo funciona la VPN en Android y la lista de API disponibles? (chupete)
  • 2 Solutions collect form web for “Establecer una conexión VPN de forma programática en android 4.0”

    Básicamente, la API VPN introducida en Android 4.0+ sólo le permite implementar su propia implementación VPN. No hace más que abrir el dispositivo TUN de Linux y pasar el descriptor de archivo a usted, además de configurar las rutas / servidores DNS / etc que ha proporcionado. Toda la implementación del protocolo VPN depende únicamente de usted.

    Así que la respuesta corta es: no. No puede utilizar la API VPN para configurar cualquiera de las

    PPTP, L2TP, L2TP / IPSec PSK o L2TP / IPSec CRT

    VPN, a menos que desarrolle su propia implementación de los tipos de VPN mencionados.

    Dicho esto, es posible que todavía intente difundir una intención de llevar a su usuario a la actividad de configuración de VPN del sistema y pedirle que configure / inicie manualmente la VPN.

    Ah, y una cosa más que agregar. En el momento de redactar este documento, el último DevicePolicyManager de Android (nivel 21 de la API) ya ofrece compatibilidad con la configuración de WiFi . Personalmente adivinaría que Google podría continuar agregando más funciones de Android for Work , que pueden incluir el soporte de aprovisionamiento de VPN que necesita. I / O 2015 está a sólo unos días de distancia así que vamos a esperar y ver …

    Hay una manera de establecer una conexión VPN mediante programación. Es posible que desee echar un vistazo a OpenVPN para Android (ics-openvpn) fuente del proyecto. Si no hace falta que la aplicación realice la conexión directamente, también puede usar intents para activar una conexión desde ics-openvpn. OpenVPN ofrece una amplia gama de configuraciones, pero todavía tiene que ver si es compatible con su servidor.

    La clase VpnService introducida en Android 4.0 (ICS) sólo puede realizar algunas configuraciones, como la creación de la interfaz de red (sólo modo tun), algunas rutas y servidores DNS. Aún es necesario que tu aplicación pueda conectarse sin el permiso de root. Es posible que desee comprobar aquí para obtener más información sobre cómo utilizar VpnService.

    Por lo que he explorado el código de ics-openvpn, la aplicación integra un binario OpenVPN ejecutables en APK de la aplicación. La aplicación ejecuta este comando binario, enviando y recibiendo comandos a través de un socket local. El binario se encarga de casi todo, sólo tiene que analizar la entrada para saber qué métodos de VpnService.Builder va a llamar y qué información va a enviar a través del socket (esto incluye confirmaciones, archivos de configuración, credenciales, bytecounts , Etc)

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.