Android: Código de muestra para usar su propia conexión VPN en Android 4.0 usando VPNService API

Soy nuevo en Android y estoy tratando de establecer y conectar mi propio vpn (No es el proveedor vpn predeterminado, es decir, PPTP , L2TP , etc., que está presente en la Setting -> Wireless and Networks Android Setting -> Wireless and Networks ) programáticamente.

Mi caso es que tengo un botón y cuando hago clic en el botón necesito configurar mi propio vpn y un enlace (digamos www.google.com) debe pasar por esa VPN que he configurado.

¿Hay algún código de muestra?

No sé por qué busqué en Google mil veces, pero no busqué en github . Buscando años ahora, finalmente encontré uno escrito bellamente . El código es literalmente hermoso, lo cual es raro:

https://github.com/hexene/LocalVPN

El proyecto no usa NDK ni ningún código nativo, puramente java, lo que lo convierte en el inicio perfecto para un proyecto simple (no es que no sea bueno para uno complejo). Y el flujo de trabajo es bastante simple:

  • Cuando una aplicación realiza una solicitud de salida (solicitud del sistema operativo Android a algún servidor en Internet) llega la solicitud LocalVPNService.class
  • En LocalVPNService se investiga el paquete TCP / UDP y se extraen las IP de origen y destino (se utiliza Packet.class para eso).
  • LocalVPNService realiza una conexión en nombre de la aplicación que inicia la solicitud y llama a VpnService.protect() en la conexión recién creada para evitar bucles.
  • Las conexiones se pasan a los controladores que simplemente pasan bytes de / a las dos conexiones en un bucle. Los subprocesos para UDP / TCP In / Out se administran en diferentes clases de trabajadores y subprocesos.

Como puede ver, Hexene ya ha hecho todo el trabajo duro y el trabajo pesado.

Todas las clases mencionadas anteriormente se encuentran en el directorio de proyectos. Eché un vistazo rápido al código fuente de github, el flujo de trabajo que se discute aquí podría no ser exacto.

Puede remitir la aplicación de muestra ToyVpn que se incluye con su SDK de Android. así que solo vaya a las muestras y remita esa aplicación. También vea esto

Además de esto, puede descargar el código fuente de Openvpn. Aquí está el enlace para eso

https://github.com/kghost/ics-openvpn

Gracias

Solución OpenSwan: https://wiki.strongswan.org/projects/strongswan/wiki/AndroidVPNClient

Solución OpenVPN: https://code.google.com/p/ics-openvpn/

Ambos requieren Android SDK y NDK .