Juegos con Wifi en ESP32

Juegos con Wifi en ESP32

Lo que me dio la idea de hacer una herramienta de bolsillo para analizar redes WiFi fue este articulo.

Gracias a ellos por la idea. Simplemente no tenía nada que hacer.

Todo el trabajo lo realicé como parte de un hobby con el propósito de divertirme y ampliar mis conocimientos en el campo de las tecnologías de redes. Poco a poco, de 1 a 4 horas semanales, desde principios de este año.
No planeé ningún uso práctico. Aquellos. Esta NO es una herramienta de piratas informáticos.

Por el momento, todas las funciones previstas están funcionando. Todas las fuentes, completamente listas para su montaje, publicado aquí. También hay instrucciones de ensamblaje, etc. En esta nota, no duplicaré la información publicada en github. Sólo os diré lo que considero necesario describir por separado.

Mi opinión sobre la “herramienta universal” y el motivo para elegir el ESP32

No pretendo ser la verdad. Cada uno tiene el suyo. Intentaré justificar mi elección de hardware.

Propuesto en el artículo. el caso de uso de una combinación de Linux (inicialmente Raspberry Pi) + “periféricos” en forma de controlador (STM32) + CC1110 (núcleo 8051) y el plan para meter todo lo posible allí (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) no me parecieron adecuados. Sin embargo, este proyecto Parece que seguirá siendo privado y cerrado (flipper-zero github “Esta organización no tiene repositorios públicos”) y se destinará a hardware no muy común.

Quizás me equivoque y en el futuro los autores pondrán a disposición del público las fuentes del software. Pero si no, entonces no compraría tal pieza de hardware sin el código fuente.

Mis requisitos para la "herramienta"

La caja debe ser pequeña (cuanto más pequeña mejor).

Por lo tanto:

  • No se necesita batería incorporada. Con una corriente > 100 mA cuando se trabaja con Wifi, la batería incorporada será grande o no durará mucho. Por lo tanto, deje que la "caja" funcione con un banco de energía estándar. De todos modos, siempre tengo un banco de energía en mi bolsillo/coche.
  • Mantenga una “caja” de Linux con herramientas en su interior. escrito durante muchos años en todos los idiomas Con una pantalla pequeña y un escaso conjunto de botones de control, no tiene sentido. Los resultados se pueden ver/procesar en una computadora portátil normal con teclado y pantalla completos.
  • Los componentes deben ser fácilmente accesibles y ampliamente conocidos (SDK disponible, muchos ejemplos y documentación).

Como resultado, para mí la elección era obvia: ESP32.

Para todas las tareas indicadas en el artículo que me impulsaron a actuar, las capacidades del ESP32 son suficientes. Aunque lo máximo que todavía quiero hacer es:

  • Juega con Bluetooth.
  • Experimente con el rango de 433 mHz con el hardware más simple (solo modulación de amplitud, que es suficiente para las necesidades prácticas).

Vuela en el ungüento en ESP32

  • El ESP32 SDK (IDF) es algo torpe.
  • Algunas de las funciones (pila WiFi, por ejemplo) vienen sin código fuente en forma de bibliotecas estáticas ensambladas.
  • La banda de 5 GHz no es compatible y existen algunas limitaciones y torpezas al trabajar con WiFi.

Pero el precio/tamaño compensa completamente estas deficiencias.

Funcionalidad principal del software

Describiré brevemente la funcionalidad y mi opinión sobre...

Administrar configuraciones y cargar archivos desde SD

Todo el control externo se realiza a través de una sencilla página web, iniciada en un elemento de menú independiente. El ESP32 se inicia en modo WiFi AP y muestra una página en una dirección IP fija.

Aunque los núcleos ESP32 son bastante rápidos, como han demostrado los experimentos, el funcionamiento simultáneo del servicio web integrado y, por ejemplo, el modo enrutador no son muy compatibles. Por lo tanto, no hay control dinámico y la página no está disponible en todos los demás modos.
Además, el control dinámico no es necesario para fines de investigación.

Modo de trabajar con paquetes Beacon

Los modos son banales y poco interesantes. Hecho "porque es posible". Para comprobarlo.
Hay ejemplos en los ejemplos oficiales de Espressif.

Modo de escaneo de lista AP.
De hecho, cualquier teléfono inteligente puede hacer esto.
Bueno, en este modo se guardará la lista de AP.
Spammer de balizas.
El ESP32 comienza como un AP con un SSID oculto y una MAC aleatoria y comienza a enviar [trama de baliza] de acuerdo con una lista previamente creada de SSID (creada manualmente u obtenida anteriormente escaneando la lista de AP)

Modo de rastreo de paquetes WiFi

Los desarrolladores de Espressif han agregado la capacidad de que el software de la aplicación reciba todos los paquetes WiFi "volando en el aire" a través de la función de devolución de llamada. En realidad no todos, ya que sólo puedes configurar el modo para un canal fijo.

Se imponen restricciones de tiempo muy estrictas al procesar una función de devolución de llamada. Si esto no causa problemas para el modo de recopilación de estadísticas simple, entonces para el modo de grabación de archivos PCAP en la tarjeta SD tuve que hacer algunos ajustes, organizando la grabación a través de una cola en la memoria y semáforos. Teniendo en cuenta la peculiaridad de que el proceso que llama a la devolución de llamada se ejecuta en un núcleo y el proceso que escribe en la SD en otro.

Durante el “aire ruidoso”, algunos paquetes se pierden (no hay espacio en la cola y se descartan), pero con un “aire” típico de un apartamento por la noche (5..7 AP dentro de la visibilidad), grabando en PCAP se completa sin pérdida de paquetes.

Además, para el monitoreo y registro de PCAP, existe un modo de filtrado basado en la lista de MAC en los encabezados de los paquetes.

Por ejemplo, puedes rastrear la apariencia de una persona en un club/café incluso antes de que entre o aparezca a la vista. Pocas personas desactivan el WiFi y las conexiones automáticas a puntos de acceso conocidos. (Lo estoy apagando ahora...)

Ver el tráfico registrado en Wireshark es educativo e interesante para comprender los mapas: todo funciona.

Modo para trabajar con paquetes deauth.

De forma predeterminada, el envío de estos paquetes está prohibido en la biblioteca libnet80211.a, que viene sin fuentes. Pero es fácil de solucionar modificando un par de partes. Al principio dudé si valía la pena publicar el parche. Pero después de caminar por diferentes lugares con el modo de escaneo de cuadros de desautenticación activado, pensé: "qué diablos". Además, en esp8266 la entrega de estos paquetes no está cerrada y hay ensamblajes en github para esp8266.

En muchos lugares (no diré dónde) se utiliza la supresión de AP no deseados mediante este método. Y estos no son “matones”...

Y también me sorprendió que mi distribución de Internet desde mi teléfono no funcionaba en algunos lugares...

El modo para rastrear el número y RSSI de dichos paquetes es muy útil para comprender "dónde no les gusta a los AP de la izquierda".

modo enrutador

Esta característica es probablemente la más interesante de todas para explorar.

ESP32 admite operación simultánea en modo STA + SoftAP. Por lo tanto, puede implementar un enrutador NAT clásico en él.

Para admitir la pila de red, Espressif utiliza una bifurcación (prácticamente sin cambios) de la biblioteca lwip.

Pero, de forma predeterminada, en la compilación estándar, la biblioteca esp-lwip no proporciona reenvío entre las interfaces netif 'ap' (SoftAP) y 'st' (STA).

Por supuesto, puede hacerlo sin NAT, pero existe un problema al conectar simultáneamente dos o más STA a la interfaz 'ap' y sincronizar las direcciones IP desde la interfaz de red 'st' a 'ap'. Entonces las dificultades no valen la pena y es más fácil a través de NAT.

Además, existe una bifurcación esp-lwip de martin-ger, que agrega una implementación simple de NAT para IP4.

Aunque mis manos estaban ansiosas por rehacerlo puramente cosméticamente (en mi opinión, fue más fácil sin la bifurcación del proyecto, pero a través de LWIPGANCHO funciones definidas durante el montaje), pero prevaleció la pereza y la opción de martin-ger se utiliza tal cual.

En el modo enrutador, se ve el tráfico IP4 entrante y saliente.

En particular, se extrae lo siguiente para mostrarlo en la pantalla y recopilar estadísticas en un archivo:

  • Nombre del dispositivo que se conectó a SoftAP ESP32 (paquetes DHCP)
  • URL de solicitudes DNS (puerto UDP 53) desde un dispositivo conectado a SoftAP ESP32.

Además, puede habilitar la grabación de tráfico en un archivo PCAP.

Este modo es muy útil, por ejemplo, para entender qué envía tu teléfono a la red y hacia dónde va.

Puede pensar en otras formas de utilizar este modo, teniendo en cuenta la capacidad de controlar completamente el tráfico entrante y saliente de softAP ESP32 en el nivel de la interfaz de red: encabezado Ehernet (destMAC[6]+srcMAC[6]+tipo[2]) + carga útil (tipo IP4, IP6, DCHP, etc.).

En principio, el ESP32 se adapta bastante bien a la función WiFi->enrutador WiFi, pasando por el tráfico normal sin retrasos especiales. Subjetivamente, los retrasos en un teléfono conectado a través de un enrutador en un ESP32 no se notan.

Desafortunadamente, la API de Espressif no tiene la capacidad de configurar un filtro para MAC conectado a SoftAP EPS32. En cambio, se propone decir "adiós" (esp_wifi_deauth_sta) a las STA ya conectadas que "no son deseadas".

El filtrado por MAC para las STA conectadas debía realizarse mediante la llamada esp_wifi_deauth_sta()

en conclusión

Aunque no se me ocurrió nada nuevo en el marco del trabajo con ESP32, quizás el resultado (código fuente) sea de interés para alguien.

Me gustaría señalar que el código fue escrito únicamente con fines educativos. Para "piratear", etc., esto se hizo deliberadamente poco conveniente.

No hice una placa de circuito impreso porque me tomó entre 1.5 y 2 horas soldar las bufandas terminadas con alambre.

Y si lo hace, debe ensamblarlo no a partir de tableros prefabricados, sino a partir de componentes individuales. Entonces las dimensiones serán aún más pequeñas.

Fuente: habr.com

Añadir un comentario