Guía de Campo: Intercepción de Radiofrecuencia (ADS-B) en DragonOS
**Mentoría de Ciberseguridad & SysAdmin**
**Objetivo:** Pasar de una herramienta GUI fallida (`intercept`) a la intercepción manual de tráfico aéreo mediante terminal.
Fase 1: Diagnóstico de Red (Wi-Fi desaparecido)
Al iniciar herramientas de auditoría, la interfaz de red dejó de tener conexión a Internet.
Causa: La tarjeta Wi-Fi estaba en **Modo Monitor** (escuchando tráfico raw), lo que impide la conexión normal (Modo Managed).
Comandos de Resolución
- 1. Comprobar el estado de la interfaz (buscar “Mode: Monitor”)
iwconfig
- 2. Desactivar el modo monitor (Método aircrack)
sudo airmon-ng stop wlan0mon
- 3. Reiniciar el gestor de red para recuperar IP
sudo systemctl restart NetworkManager
Fase 2: Conflicto de Hardware (RTL-SDR “Device Busy”)
Incidente: Al intentar ejecutar readsb o rtl_433, el programa se cerraba o daba error “Device busy”. Diagnóstico: El USB RTL-SDR estaba siendo “secuestrado” por el Kernel (driver de TV) o por otro proceso en segundo plano.
Paso 2.1: El “Smoking Gun” (La prueba del error)
Usamos rtl_test para ver qué le pasaba al hardware:
Conflicto de Hardware (RTL-SDR “Device Busy”)
Incidente: Al intentar ejecutar readsb o rtl_433, el programa se cerraba o daba error “Device busy”. Diagnóstico: El USB RTL-SDR estaba siendo “secuestrado” por el Kernel (driver de TV) o por otro proceso en segundo plano.
Paso 2.1: El “Smoking Gun” (La prueba del error)
Usamos rtl_test para ver qué le pasaba al hardware:
rtl_test -t
Resultado: “usb_claim_interface error -6” (Error -6 = EBUSY / Ocupado)
Paso 2.2: Eliminación del Driver de TV (Kernel Module)
Linux carga por defecto drivers para ver la tele (DVB-T). Debemos descargarlos.
Bash
Comprobar si está cargado
lsmod | grep dvb
Descargar el módulo a la fuerza temporalmente
sudo rmmod dvb_usb_rtl28xxu
(Solución permanente) Añadir a blacklist
echo “blacklist dvb_usb_rtl28xxu” | sudo tee /etc/modprobe.d/blacklist-rtl.conf
Paso 2.3: Eliminación de Procesos “Zombie”
Incluso sin el driver, el dispositivo seguía ocupado. Descubrimos que readsb ya corría como servicio.
Identificar quién usa el USB (Bus 001, Device 061 por ejemplo)
lsusb
sudo fuser -v /dev/bus/usb/001/061
Resultado: PID 493296 (readsb) estaba usándolo.
Acción: Matar el proceso
sudo kill -9 493296
Fase 3: Ejecución del Servicio ADS-B (readsb)
Contexto: DragonOS trae readsb instalado como un daemon (servicio systemd). Lección: No debemos ejecutarlo manualmente si ya existe un servicio configurado para ello.
Gestión del Servicio
Arrancar el servicio en segundo plano
sudo systemctl start readsb
Comprobar que está “Active (running)” y no ha muerto
sudo systemctl status readsb
Ver los logs en tiempo real (stdout)
sudo journalctl -u readsb -f
Fase 4: Intercepción y Decodificación
Objetivo: Ver los datos crudos que el servicio está emitiendo, ya que no tiene interfaz gráfica propia en la terminal. Herramienta: netcat (nc) para conectarnos al puerto TCP de salida de datos.
El Comando de Intercepción
# Conectar al puerto 30003 (Formato BaseStation/CSV)
nc 127.0.0.1 30003
Análisis de Captura (Ejemplo Real)
Recibimos datos como este: MSG,3,1,1,4D2240,1,2026/01/05,01:25:05.541,…,36000,,,40.121658,-3.786377,,,0,,0,0
Dato Valor Capturado Significado
Protocolo MSG,3 Mensaje tipo 3 (Contiene coordenadas)
ICAO Hex 4D2240 Matrícula única del avión (Malta Air)
Callsign RYR8819 Número de Vuelo (Ryanair 8819)
Altitud 36000 36.000 pies (Crucero)
Coordenadas 40.12, -3.78 Sur de Madrid (Móstoles/Fuenlabrada)
Apéndice: Trucos de Supervivencia (Linux CLI)
Buscar ayuda de comandos:
-
curl cheat.sh/comando (Chuleta rápida)
-
tldr comando (Ejemplos prácticos)
-
man comando (Manual completo)
Encontrar binarios perdidos:
-
dpkg -l | grep nombre (Buscar en instalados)
-
find / -name “nombre” -type f -executable (Búsqueda forense en disco)
Arreglar visualización less:
Si ves caracteres raros (^[[31m): Usa less -R.
Intercepción de tráfico aéreo realizada con éxito mediante herramientas de terminal nativas.
Fase 2: Conflicto de Hardware (RTL-SDR “Device Busy”)
Incidente: Al intentar ejecutar readsb o rtl_433, el programa se cerraba o daba error “Device busy”. Diagnóstico: El USB RTL-SDR estaba siendo “secuestrado” por el Kernel (driver de TV) o por otro proceso en segundo plano.
Usamos rtl_test para ver qué le pasaba al hardware:
rtl_test -t
Resultado: “usb_claim_interface error -6” (Error -6 = EBUSY / Ocupado)
Eliminación del Driver de TV (Kernel Module)
Linux carga por defecto drivers para ver la tele (DVB-T). Debemos descargarlos.
Comprobar si está cargado
lsmod | grep dvb
Descargar el módulo a la fuerza temporalmente
sudo rmmod dvb_usb_rtl28xxu
(Solución permanente) Añadir a blacklist
echo “blacklist dvb_usb_rtl28xxu” | sudo tee /etc/modprobe.d/blacklist-rtl.conf
Eliminación de Procesos “Zombie”
Incluso sin el driver, el dispositivo seguía ocupado. Descubrimos que readsb ya corría como servicio.
Identificar quién usa el USB (Bus 001, Device 061 por ejemplo)
lsusb
sudo fuser -v /dev/bus/usb/001/061
Resultado: PID 493296 (readsb) estaba usándolo.
Acción: Matar el proceso
sudo kill -9 493296
Fase 3: Ejecución del Servicio ADS-B (readsb)
Contexto: DragonOS trae readsb instalado como un daemon (servicio systemd). Lección: No debemos ejecutarlo manualmente si ya existe un servicio configurado para ello.
Gestión del Servicio
Arrancar el servicio en segundo plano
sudo systemctl start readsb
Comprobar que está “Active (running)” y no ha muerto
sudo systemctl status readsb
Ver los logs en tiempo real (stdout)
sudo journalctl -u readsb -f
Fase 4: Intercepción y Decodificación
Objetivo: Ver los datos crudos que el servicio está emitiendo, ya que no tiene interfaz gráfica propia en la terminal. Herramienta: netcat (nc) para conectarnos al puerto TCP de salida de datos.
El Comando de Intercepción
Conectar al puerto 30003 (Formato BaseStation/CSV)
nc 127.0.0.1 30003
Análisis de Captura (Ejemplo Real)
Recibimos datos como este:
MSG,3,1,1,4D2240,1,2026/01/05,01:25:05.541,…,36000,,,40.121658,-3.786377,,,0,,0,0
Dato Valor Capturado Significado
Protocolo MSG,3 Mensaje tipo 3 (Contiene coordenadas)
ICAO Hex 4D2240 Matrícula única del avión (Malta Air)
Callsign RYR8819 Número de Vuelo (Ryanair 8819)
Altitud 36000 36.000 pies (Crucero)
Coordenadas 40.12, -3.78 Sur de Madrid (Móstoles/Fuenlabrada)
Apéndice: Trucos de Supervivencia (Linux CLI)
Buscar ayuda de comandos:
-
curl cheat.sh/comando (Chuleta rápida)
-
tldr comando (Ejemplos prácticos)
-
man comando (Manual completo)
Encontrar binarios perdidos:
-
dpkg -l | grep nombre (Buscar en instalados)
-
find / -name “nombre” -type f -executable (Búsqueda forense en disco)
Arreglar visualización less:
Si ves caracteres raros (^[[31m): Usa less -R.
Estado Final: Misión Cumplida. Intercepción de tráfico aéreo realizada con éxito mediante herramientas de terminal nativas.
Manual de Operaciones: De GUI a CLI en DragonOS
Sustitución completa de la herramienta ‘Intercept’ por comandos nativos**
Estado: Validado en entorno de producción (DragonOS)
PROTOCOLO DE CONFLICTO DE HARDWARE (¡LEER PRIMERO!)
El hardware SDR (RTL-SDR) es monógamo. No puedes ejecutar dos herramientas de radio a la vez.
Si vas a usar `rtl_433` o Pagers: Debes detener el servicio de aviones.
sudo systemctl stop readsb
Si vas a usar Aviones: Debes asegurarte de que nadie más usa el USB.
sudo killall rtl_433 rtl_fm
Módulo 1: Tráfico Aéreo (ADS-B 1090MHz)
Sustituye a: ADS-B Map
Herramienta: `readsb` (Servicio del sistema)
Gestión del Servicio
Iniciar servicio (modo segundo plano)
sudo systemctl start readsb
Ver estado (¿Está vivo?)
sudo systemctl status readsb