Detectar detrás de VPN en android

Cómo detectar programatically si el tráfico está pasando a través de VPN sin usar la intención de conectarse a VPNService. ¿Hay alguna llamada al sistema?

El sistema operativo Android es consciente de cuándo está activa una conexión VPN (ya que muestra un icono en la barra de estado durante la duración de una conexión VPN) pero no hay un método API público (que aparecería en el VpnService) para comprobar si hay una conexión activa conexión.

Se producen dos soluciones. Si se trata de una situación específica en la que conoce la topología de red, ejecute 'ping' para ver si una dirección IP particular está disponible: use System.exec . El comando ping está presente en dispositivos Android con ROM de stock, lo he utilizado como parte de una solución para proporcionar una vista más granular del estado de una conexión de datos (dirección IP no asignada, dirección IP asignada, pero no se puede acceder El Internet, puede tener acceso al Internet)

Una mejor solución sería ejecutar una traceroute en su lugar y analizar la salida. No he comprobado si traceroute está presente en dispositivos Android con ROMs de stock, editaré esta respuesta más tarde con información más completa.

Esto funciona :

 private boolean checkVPN() { ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getNetworkInfo(ConnectivityManager.TYPE_VPN).isConnectedOrConnecting(); } 

Es posible comprobarlo en la API de Android 21 un mayor, pero parece que no funciona, no sé (en nexus 5 @ 5.0.1, nexus 7 @ 5.0.2) por qué …

Snippet de la nueva API para comprobarlo (y todo el tráfico se enruta por vpn si está conectado):

  @Inject boolean checkVPN(ConnectivityManager connMgr) { //don't know why always returns null: NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_VPN); boolean isVpnConn = networkInfo == null ? false : networkInfo.isConnected(); return isVpnConn; } 
  • Android VpnService, reenvío de paquetes
  • ¿Comprobar si una conexión VPN está activa en Android?
  • Cómo crear un perfil VPN y conectarse a él en android mediante programación?
  • ¿Hay alguna manera de crear un proxy HTTP en VPN en Android?
  • Método para pasar nombre de usuario y contraseña en VpnService.Builder
  • Android: Código de ejemplo para usar la conexión VPN propia en Android 4.0 mediante VPNService API
  • ¿Tiene Jellybean 4.2 la intención de conectarse a una VPN ya definida?
  • Paquete enviado pero no puede recibir paquetes
  • Clase Android VpnService y su clase de constructor
  • ¿Cómo están creando nuevos perfiles de aplicaciones VPN existentes en Android 2.0 - 2.3?
  • Cómo comprobar el estado de la conexión VPN en Android ICS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.