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?
- ¿Existe una API de proveedor VPN para Android?
- ¿Cualquier organismo sabe cómo hacer una conexión VPN mediante programación usando el protocolo de servidor L2TP / IPSec en android?
- Cómo conectarse a una VPN, que ya está configurada en un teléfono Android, mediante programación
- ¿Cómo configurar VPN de forma programática?
- Captura de paquetes de red en Android?
- ¿Cómo funciona la VPN en Android y la lista de API disponibles? (chupete)
- Cómo conectar el dispositivo Android a PPTP VPN
- Instalación / Acceso a Certs para VPN / WIFI mediante programación en Android
- La conexión VPN del emulador de Android falla
- Conectar a VPN en Genymotion Android
- Android: No se puede conectar al servidor VPN a través de la aplicación ToyVpn; Obtener una excepción de puerto inalcanzable
- Iniciar VPNService desde dentro de widget android
- Cree una conexión VPN L2TP / IPSec mediante programación en Android
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; }
- Submenú ActionBar ActionProvider de Android
- No se pueden obtener filtros de intenciones de un paquete