Una vez necesitaba escanear desde una aplicación de Android para redes Wi-Fi y obtener una visualización detallada de los datos sobre los puntos de acceso.
Aquí tuve que enfrentar varias dificultades: en la documentación fuera de línea de Android, muchas de las clases descritas quedaron obsoletas (nivel de API> 26), lo que no se reflejó en ella de ninguna manera; la descripción de algunas cosas en la documentación es mínima (por ejemplo, el campo de capacidades de la clase ScanResult casi no se describe al momento de escribir, aunque contiene muchos datos importantes). La tercera dificultad puede residir en el hecho de que cuando te acercas por primera vez a Wi-Fi, además de leer la teoría y configurar un enrutador en localhost, tienes que lidiar con una serie de abreviaturas que parecen comprensibles de forma aislada. Pero puede no ser obvio cómo relacionarlos y estructurarlos (el juicio es subjetivo y depende de la experiencia previa).
Este artículo analiza cómo obtener datos completos sobre el entorno Wi-Fi del código de Android sin NDK, hacks, pero solo usando la API de Android y cómo interpretarlos.
No nos demoremos y comencemos a escribir código.
1. Crea un proyecto
La nota está dirigida a aquellos que han creado un proyecto de Android más de una vez, por lo que omitimos los detalles de este párrafo. El siguiente código estará en Kotlin, minSdkVersion=23.
2. Permisos de acceso
Para trabajar con Wi-Fi desde la aplicación, deberá obtener varios permisos del usuario. De acuerdo con la documentación, para escanear la red en dispositivos con versiones de SO posteriores a la 8.0, además de acceder a ver el estado del entorno de la red, necesita acceso para cambiar el estado del módulo Wi-Fi del dispositivo, o acceso a coordenadas (aproximadas o exactas). A partir de la versión 9.0, debe solicitar al usuario ambos, al mismo tiempo que solicita explícitamente al usuario que active el servicio de ubicación. No olvide explicar galantemente al usuario que esto es un capricho de Google, y no nuestro deseo de organizar la vigilancia de él.
En total, agregue a AndroidManifest.xml:
Y en el código que tiene un enlace a la Actividad actual:
3. Cree un BroadcastReceiver y suscríbase a los eventos de actualización de datos sobre el escaneo del entorno de la red Wi-Fi
El método WiFiManager.startScan en la documentación está marcado como obsoleto desde la versión 28 de la API, pero desactivado. la guía sugiere usarlo.
En total, obtuvimos una lista de objetos ScanResult.
4. Mire ScanResult y comprenda los términos
Veamos algunos campos de esta clase y describamos lo que significan:
SSID – Service Set Identifier es el nombre de la red
BSSID – Identificador de conjunto de servicios básicos – Dirección MAC del adaptador de red (puntos Wi-Fi)
nivel – Indicador de intensidad de la señal recibida [dBm (dBm ruso) – Decibelio, potencia de referencia 1 mW.] – Indicador del nivel de la señal recibida. Toma un valor de 0 a -100, cuanto más lejos de 0, más potencia de señal se perdió en el camino desde el punto Wi-Fi a su dispositivo. Se pueden encontrar más detalles, por ejemplo, en Wikipedia. Aquí te diré que usando la clase WifiManager de Android, puedes calibrar el nivel de la señal en una escala de excelente a terrible con el paso que elijas:
frecuencia — frecuencia del punto Wi-Fi [Hz]. Además de la propia frecuencia, te puede interesar el llamado canal. Cada punto tiene su propia pureza de trabajo. En el momento de escribir este artículo, el rango más popular de puntos de acceso Wi-Fi es de 2.4 GHz. Pero, para ser más precisos, el punto transmite información a su teléfono en una frecuencia numerada cercana a la nombrada. El número de canales y los valores de las frecuencias correspondientes están estandarizados. Esto se hace para que los puntos cercanos operen en diferentes frecuencias, por lo que no interfieren entre sí y no reducen la velocidad y la calidad de la transmisión entre sí. En este caso, los puntos no operan a una frecuencia, sino a un rango de frecuencia (parámetro Ancho de banda), llamado ancho de canal. Es decir, los puntos que operan en los canales vecinos (y no solo en los vecinos, sino incluso 3 de ellos mismos) interfieren entre sí. Puede encontrar útil este código simple, que le permite calcular el número de canal a partir del valor de frecuencia para puntos con una frecuencia de 2.4 y 5 Ghz:
capacidades – el campo más interesante para el análisis, cuyo trabajo requirió mucho tiempo. Aquí las “capacidades” del punto están escritas en la línea. Al mismo tiempo, no puede buscar detalles de la interpretación de la cadena en la documentación. Aquí hay algunos ejemplos de lo que podría estar en esta línea:
5. Comprender las abreviaturas y las capacidades de análisis
Vale la pena mencionar que las clases del paquete android.net.wifi.* usan la utilidad de Linux wpa_supplicant debajo del capó y el resultado de la salida en el campo de capacidades es una copia del campo de banderas al escanear.
Actuaremos consecuentemente. Primero, consideremos la salida de dicho formato, en el que los elementos dentro de los corchetes están separados por un signo “-“:
El primer significado describe el llamado. método de autentificación. Es decir, qué secuencia de acciones deben realizar el dispositivo y el punto de acceso para que el punto de acceso permita su uso y cómo cifrar la carga útil. Al momento de escribir este artículo, las opciones más comunes son WPA y WPA2, en las que cada dispositivo se conecta directamente oa través de los llamados. El servidor RADIUS (WPA-Enterprice) proporciona la contraseña a través de un canal encriptado. Lo más probable es que en su hogar, el punto de acceso proporcione una conexión de acuerdo con este esquema. La diferencia entre la segunda versión y la primera está en un cifrado más fuerte: AES versus TKIP inseguro. WPA3 también se está introduciendo gradualmente, más complejo y avanzado. En teoría, puede haber una opción con una solución empresarial CCKM (Administración centralizada de claves de Cisco), pero no la he encontrado.
Es posible que el punto de acceso se haya configurado para autenticarse por dirección MAC. O bien, si el punto de acceso proporciona datos mediante el algoritmo WEP obsoleto, en realidad no hay autenticación (la clave secreta aquí es la clave de cifrado). Nos referimos a tales variantes como OTRAS.
También hay un método wi-fi popular con una detección de portal cautivo oculta: una solicitud de autenticación a través de un navegador. Dichos puntos de acceso aparecen para el escáner como abiertos (que lo son en términos de conexión física). Por lo tanto, los referimos al tipo ABIERTO.
El segundo valor se puede denotar como algoritmo de gestión de claves. Es un parámetro del método de autenticación descrito anteriormente. Habla sobre cómo se intercambian exactamente las claves de cifrado. Considera las posibles opciones. EAP: utilizado en el mencionado WPA-Enterprice, utiliza una base de datos para verificar los datos de autenticación ingresados. SAE: utilizado en WPA3 avanzado, más resistente a la fuerza bruta. PSK: la opción más común, implica ingresar una contraseña y transmitirla en forma encriptada. IEEE8021X: de acuerdo con el estándar internacional (que no sea compatible con la familia WPA). OWE (Opportunistic Wireless Encryption) es una extensión del estándar IEEE 802.11 para puntos que hemos clasificado como ABIERTOS. OWE protege los datos transmitidos a través de una red insegura cifrándolos. También es posible cuando no hay claves de acceso, llamemos a esta opción NINGUNA.
El tercer parámetro es el llamado. esquemas de cifrado – cómo se usa exactamente el cifrado para proteger los datos transmitidos. Hagamos una lista de las opciones. WEP: utiliza el cifrado de flujo RC4, la clave secreta es la clave de cifrado, que se considera inaceptable en el mundo de la criptografía moderna. TKIP se usa en WPA, CKIP se usa en WPA2. TKIP+CKIP: se puede especificar en puntos compatibles con WPA y WPA2 para compatibilidad con versiones anteriores.
En lugar de tres elementos, puede encontrar una sola marca WEP:
Como comentamos anteriormente, esto es suficiente para no especificar el algoritmo de uso de claves, que no existe, y el método de cifrado, que es uno por defecto.
Ahora considere este paréntesis:
Lo modo de funcionamiento wifi o topología de redes wifi. Es posible que se encuentre con el modo BSS (conjunto de servicios básicos), cuando hay un punto de acceso a través del cual se comunican los dispositivos conectados. Se puede encontrar en las redes locales. Por regla general, los puntos de acceso son necesarios para conectar dispositivos de diferentes redes locales, por lo que forman parte de los conjuntos de servicios extendidos – ESS. El tipo IBSS (Conjuntos de Servicios Básicos Independientes) indica que el dispositivo es parte de una red Peer-to-Peer.
La bandera WPS también puede ser capturada:
WPS (Wi-Fi Protected Setup) es un protocolo para la inicialización semiautomática de una red Wi-Fi. Para inicializar, el usuario ingresa una contraseña de 8 caracteres o presiona un botón en el enrutador. Si su punto de acceso es del primer tipo y esta casilla de verificación se muestra junto al nombre de su punto de acceso, se recomienda enfáticamente que vaya al panel de administración y deshabilite el acceso WPS. El hecho es que a menudo se puede encontrar un PIN de 8 dígitos por la dirección MAC, o se puede resolver en un tiempo previsible, que alguien deshonesto puede usar.
6. Crea un modelo y una función de análisis
Según lo que descubrimos anteriormente, describiremos lo que sucedió con las clases de datos:
Ahora escribamos una función que analizará el campo de capacidades:
8. Ver el resultado
Escanearé la red y te mostraré lo que pasó. Se muestran los resultados de una salida simple a través de Log.d:
El tema de conectarse a la red desde el código de la aplicación permaneció sin resolver. Solo diré que para leer las contraseñas guardadas del sistema operativo del dispositivo móvil, necesita derechos de root y la voluntad de hurgar en el sistema de archivos para leer wpa_supplicant.conf. Si la lógica de la aplicación requiere ingresar una contraseña desde el exterior, la conexión se puede realizar a través de la clase android.net.wifi.WifiManager.
Gracias a Egor Ponomarev por sus valiosas adiciones.
Si crees que hay que añadir o corregir algo, escríbelo en los comentarios.
Si su conexión Wi-Fi es inestable y se desconecta de forma intermitente, es probable que haya una fuerte interferencia de otras redes Wi-Fi. Este es un problema muy común que enfrentan las personas que viven en edificios de apartamentos.
Un problema similar ocurre cuando demasiados usuarios están en el mismo canal Wi-Fi que usted. En este caso, puede usar una de las aplicaciones de análisis de Wi-Fi desarrolladas para Android para ver los canales menos cargados. Algunas de estas aplicaciones también se pueden usar para verificar la intensidad de la señal de Wi-Fi.
Echemos un vistazo a las mejores aplicaciones de análisis de Wi-Fi disponibles para dispositivos Android.
Analizador WiFi de OLGOR.COM
Esta app de análisis de wifi es una de las más populares de la Play Store. Funciona rápidamente y tiene una interfaz fácil de usar. Gracias a él, puedes encontrar los mejores canales usando el gráfico de canales o su calificación.
El escáner muestra la intensidad de la señal de cada punto de acceso en tiempo real y cálculos de distancia. Además, puede ver Wi-Fi oculto.
Con todo, este es el mejor analizador de Wi-Fi para Android que puede usar para ver canales llenos de gente. Sin embargo, los anuncios en esta aplicación gratuita son un verdadero problema para muchos.
Analizador WiFi (código abierto)
Si le preocupa la privacidad y está buscando una aplicación de código abierto, este analizador de Wi-Fi es la mejor opción para usted.
En esta aplicación, puede ver varios puntos de acceso, conocer la intensidad de la señal y el canal en el que se encuentran. También puede filtrar los puntos de acceso según la intensidad de la señal, el alcance de Wi-Fi y la seguridad. Puede ordenar por otros criterios, simplemente vaya a la configuración de la aplicación.
Para ayudarlo a determinar el mejor canal, esta aplicación de Android proporciona un gráfico de canales y una página de clasificación de canales. También hay una línea de tiempo.
Analizador WiFi de Zoltán Pallagi
Esta es la aplicación de análisis Wi-Fi más completa de esta colección. Escanea su red Wi-Fi para determinar la potencia, la velocidad y la latencia de la señal.
Este analizador Wi-Fi gratuito tiene todas las funciones estándar, como clasificación de canales, gráfico de canales, intensidad de la red en tiempo real y más.
La aplicación también tiene un escáner de red que se puede usar para encontrar dispositivos desconocidos conectados a su red. Además, desde esta aplicación podrás ver y editar la configuración del router.
Información de celda de red Lite
Si está buscando una aplicación para determinar la intensidad de la señal Wi-Fi, asegúrese de consultar Network Cell Info Lite. Sin duda es uno de los mejores.
La aplicación mostrará información de la red en un mapa y lo ayudará a diagnosticar problemas de conexión. Network Cell Info Lite es compatible con GSM, CDMA, UMTS (WCDMA), WLAN, LTE y LTE+.
Las mediciones de red se pueden exportar a varios tipos de bases de datos, incluidas KML 2.2, CLF v.3, OpenCellID csv, CMW, etc. Si bien la aplicación es buena para medir la intensidad de la señal, no puede usarla para ver canales Wi-Fi.
wifiman
En mi opinión, esta es una de las mejores aplicaciones de temas para Android. Es ideal para quienes desean verificar la intensidad de la señal de su Wi-Fi. Y no tiene anuncios.
La aplicación tiene una interfaz de usuario simple y le permite mover fácilmente puntos de acceso a otros canales para mejorar la velocidad de Internet. Puede comparar señales Wi-Fi, verificar las velocidades de carga y descarga, y más.
Tenga en cuenta que esta aplicación no muestra canales Wi-Fi. Y si desea cambiar el canal, es mejor elegir otra opción.
Medidor de señal WiFi
Usando WiFi Signal Meter, puede verificar su velocidad WiFi, medir la intensidad de la señal y ver los canales con menos tráfico.
La aplicación tiene una interfaz de usuario actualizada y las instrucciones detalladas lo ayudarán a seleccionar fácilmente el canal Wi-Fi correcto. Además, WiFi Signal Meter tiene otras funciones esenciales, como la visualización de datos gráficos en tiempo real, la visualización de la velocidad de descarga y subida de una red específica, etc.
En general, esta es una de las mejores aplicaciones de intensidad de señal de Wi-Fi para los usuarios de Android.
Analizador de red
Esta es una aplicación completa de escaneo de canales Wi-Fi que también es capaz de diagnosticar problemas en su red Wi-Fi y en servidores remotos.
Esta aplicación para Android (hay una versión para iOS) es la mejor para aquellos que quieren saber todo sobre su red local. Network Analyzer tiene varias herramientas de diagnóstico de red, como un escáner de puertos, búsqueda de DNS y más. Además, con su ayuda, puede ver la intensidad de la señal de Wi-Fi, su encriptación y el fabricante del enrutador.