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?
- ¿Cómo encontrar el estado de la conexión VPN a través de API de marco o cualquier otro método eficiente?
- ¿Tiene Jellybean 4.2 la intención de conectarse a una VPN ya definida?
- ¿Cuál es la manera más fácil de establecer una conexión VPN mediante programación? (pptp) ¿Está utilizando archivos .aidl?
- Conectar a VPN en Genymotion Android
- Cómo comprobar el estado de la conexión VPN en Android ICS
- Clase Android VpnService y su clase de constructor
- ¿Cualquier organismo sabe cómo hacer una conexión VPN mediante programación usando el protocolo de servidor L2TP / IPSec en android?
- ¿Cómo están creando nuevos perfiles de aplicaciones VPN existentes en Android 2.0 - 2.3?
- Obtener el estado de la conexión VPN en Android
- Programe PPTP / L2TP VPN de forma programática en Android
- Detección de solicitud de aplicación de VPN Service + Packets bloqueando
- La conexión VPN del emulador de Android falla
- Crear VPN en android 4.0 con VpnService
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