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