Android: Determinar el tipo de seguridad de las redes wifi en el rango (sin conectarse a ellos)

Puedo enumerar todas las redes wifi de rango (usando startScan + SCAN_RESULTS_AVAILABLE_ACTION + getScanResults) y obtener sus valores SSID y BSSID, pero no puedo averiguar cómo determinar el tipo de seguridad de cada red.

En mi objeto principal:

IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); registerReceiver(scanReceiver, intentFilter); ((WifiManager)getSystemService(Context.WIFI_SERVICE)).startScan(); 

En mi objeto scanReceiver:

 public void onReceive(Context c, Intent intent) { if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())){ mainObject.scanComplete(); } } 

Y de nuevo en mi objeto principal:

 public void scanComplete() { List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults(); for (ScanResult network : networkList) { <do stuff> } } 

El código funciona en la medida en que scanComplete finalmente se llama, y ​​puedo enumerar con éxito todas las redes wifi cercanas y obtener su SSID y BSSID, pero no puedo averiguar cómo determinar su tipo de seguridad.

¿Hay alguna forma de hacer esto?

Gracias por adelantado.

4 Solutions collect form web for “Android: Determinar el tipo de seguridad de las redes wifi en el rango (sin conectarse a ellos)”

Creo que se puede encontrar en el código fuente de Settings.apk.

Primero debes llamar a wifiManager.getConfiguredNetworks() o wifiManager.getScanResults() , luego usar los dos métodos siguientes: (encontrarlos en la class "com.android.settings.wifi" AccessPoint class "com.android.settings.wifi" ):

 static int getSecurity(WifiConfiguration config) { if (config.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { return SECURITY_PSK; } if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP) || config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { return SECURITY_EAP; } return (config.wepKeys[0] != null) ? SECURITY_WEP : SECURITY_NONE; } static int getSecurity(ScanResult result) { if (result.capabilities.contains("WEP")) { return SECURITY_WEP; } else if (result.capabilities.contains("PSK")) { return SECURITY_PSK; } else if (result.capabilities.contains("EAP")) { return SECURITY_EAP; } return SECURITY_NONE; } 

Espero que esto sea útil.

Necesita analizar la cadena de capacidades de ScanResult en el método scanComplete. De acuerdo con la documentación para desarrolladores de Android,:

ScanResult.capabilities describe los esquemas de autenticación, administración de claves y cifrado admitidos por el punto de acceso.

Podría ser capaz de hacer uso de – o al menos utilizar como ejemplo – los métodos auxiliares estáticos disponibles en la clase AccessPointState.

  • AccessPointState.getScanResultSecurity
  • AccessPointState.isEnterprise

Muchas gracias, has hecho mi día

Tengo algo que agregar aquí. Sin escanear las redes, se puede obtener la información de configuración wifi actualmente conectada (especialmente encriptación y administración de claves) de la siguiente manera,

 WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); List<ScanResult> networkList = wifi.getScanResults(); if (networkList != null) { for (ScanResult network : networkList) { String Capabilities = network.capabilities; Log.w (TAG, network.SSID + " capabilities : " + Capabilities); } } 

El tipo de seguridad de cada red se encuentra en la columna Capacidades de los resultados del análisis.

Así que para obtener el tipo de seguridad para usted, agregue esto a su parte de su código.

 public void scanComplete() { List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults(); for (ScanResult network : networkList) { String Capabilities = network.capabilities; //Then you could add some code to check for a specific security type. if(Capabilities.contains("WPA")) { // We know there is WPA encryption } else if(Capabilities.contains("WEP")) { // We know there is WEP encryption } else { // Another type of security scheme, open wifi, captive portal, etc.. } } } 

De todos modos, he aquí un código fuente rápido. Sin embargo, recomiendo totalmente la respuesta de Ayj, ya que es una respuesta excepcional y más completa.

  • Conéctese mediante programación a un dispositivo Android en Hotspot portátil
  • Configuración de HTTP Proxy para redes WIFI en dispositivos Android 1.xy 2.x
  • ¿Hacer de un dispositivo móvil un control remoto para una tableta?
  • ¿Puedo encontrar la dirección MAC de mi punto de acceso en Android?
  • WPS Parámetros Wifi NFC y Android
  • Android se conecta a WiFi sin interacción humana
  • Cómo detener la exploración wifi en Android?
  • Android: Compruebe que la red 3G o Wifi está ACTIVADA o Disponible o no en Android Dispositivo
  • Imprimir desde android sin sistema de diálogo
  • Conectarse a WiFi abierto
  • Búsqueda de puntos de acceso Wi-Fi en Android mientras está en modo punto de acceso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.