
htop para las ondas — un panel RF en vivo de 802.11 (Wi-Fi) en tu terminal
htop para las ondas — un panel RF 802.11 (Wi-Fi) en vivo en tu terminal.
airtop convierte el tráfico Wi-Fi a tu alrededor en un panel de terminal en vivo — un espectro de frecuencia de los puntos de acceso cercanos, trazas de señal por estación, un feed de actividad por tipo de trama, un histograma de RSSI y una lista dinámica de redes descubiertas — dibujado con gráficos braille y de bloques sobre eBPF.
[!TIP] Sin modo monitor, sin raw sockets. airtop adjunta programas eBPF a
mac80211/cfg80211y lee las tramas 802.11 mientras fluyen a través de la pila Wi-Fi del kernel, por lo que se ejecuta en tu interfaz normal y conectada sin interrumpir tu enlace.
curl -fsSL https://yeet.cx | sh
yeet run https://github.com/yeet-src/airtop
Para una captura de pantalla que se pueda compartir, anonimiza los SSID y las MAC (tu red y las de tus vecinos se renombran como network-01, station-02, …):
yeet run https://github.com/yeet-src/airtop -- --anonymize
Se ejecuta hasta Ctrl-C. Redimensiona la terminal y el diseño se reajusta; mínimo 80×24.
Para que aparezcan las redes vecinas, el kernel necesita resultados de escaneo. Tu sistema operativo escanea periódicamente por su cuenta, o fuerza uno:
nmcli dev wifi rescan # or: iw dev <iface> scan
Wi-Fi es la familia de estándares IEEE 802.11. El modelo mental:
Todo es una trama. Tu portátil, teléfono y router intercambian paquetes de radio cortos llamados tramas. Cada trama lleva direcciones MAC, y una de ellas (el BSSID) identifica el punto de acceso al que pertenece.
Tres clases de trama:
| Clase | Ejemplos | Propósito |
|---|---|---|
| Management | Beacon, Probe, Auth, Assoc, Deauth | anunciar, unirse y abandonar redes |
| Control | ACK, RTS/CTS | coordinar quién puede hablar |
| Data | tu tráfico real | transportar cargas útiles |
Los puntos de acceso emiten balizas. Un AP se anuncia ~10 veces por segundo con una trama de baliza que lleva su nombre de red (SSID) y BSSID. Así se llena la lista Wi-Fi de tu teléfono, y así descubre airtop los AP.
Canales y frecuencia. Wi-Fi vive en bandas (2,4 GHz, 5 GHz, 6 GHz), cada una dividida en canales, y cada canal es una frecuencia central en MHz (canal 6 ≈ 2437 MHz, canal 161 ≈ 5805 MHz). Una radio escucha un canal a la vez, por eso ves principalmente tráfico en tu canal.
La intensidad de señal (RSSI) se mide en dBm. Los valores siempre son negativos, y cuanto más cerca de cero, más fuerte:
| RSSI | calidad |
|---|---|
| −30 … −50 dBm | excelente (justo al lado) |
| −50 … −67 dBm | bueno |
| −67 … −80 dBm | utilizable |
| −80 … −90 dBm | débil / marginal |
Principalmente usuarios domésticos depurando un Wi-Fi inestable, y administradores de red eligiendo canales antes de un evento.
Cada panel se corresponde con los conceptos anteriores:
Cabecera — tiempo de actividad, total de tramas vistas, estaciones activas, AP descubiertos, cantidad de balizas, cantidad de deauth (en rojo si alguno es distinto de cero) y tu canal actual. El contador de deauth es el que hay que vigilar; las redes sanas tienen cero.
Espectro de frecuencia — cada AP descubierto se dibuja como una "joroba" de señal posicionada en su frecuencia central real sobre un eje de MHz. La altura y el color muestran la RSSI; la etiqueta es el SSID + dBm. Las jorobas superpuestas revelan congestión en el mismo canal — la clásica vista de analizador de Wi-Fi, y la respuesta a "por qué mi Wi-Fi va lento".
RSSI × tiempo — un gráfico de líneas en braille por cada estación activa que traza su señal durante los últimos segundos. Observa cómo un enlace se desvanece cuando un dispositivo se aleja del AP, o cómo salta cuando alguien mueve su portátil.
Feed de tramas — un mapa de calor de tipos de trama a lo largo del tiempo; color de la celda = cuántas de ese tipo llegaron por franja. Una ráfaga de deauth ilumina esa fila al instante, que es el patrón de alerta que realmente quieres.
Histograma de señal — distribución de las tramas recibidas por RSSI. La "forma" de tu entorno RF: un pico estrecho alrededor de −50 dBm significa que estás cerca de un AP fuerte; una mancha entre −60 y −80 significa un entorno saturado.
Puntos de acceso — SSID descubiertos con canal, indicador de señal y dBm, ordenados de más fuerte a más débil.
Un único objeto BPF (airtop.bpf.c) adjunta dos programas fentry y transmite eventos al espacio de usuario a través de ring buffers:
| Hook | Lo que captura |
|---|---|
fentry/ieee80211_rx_list | cada trama 802.11 recibida: tipo/subtipo, direcciones, RSSI de ieee80211_rx_status |
fentry/cfg80211_inform_bss_frame_data | cada AP que descubren los escaneos del kernel: SSID, canal, señal |
El panel se ejecuta en el runtime V8 de yeet, suscribiéndose a esos ring buffers y renderizando la UI de la terminal:
main.js entry: tty size, render loop, BPF bind/subscribe
state.js live data + frame/scan ingest
render.js ANSI, color ramps, braille canvas/charts (pure)
dashboard.js panels + layout (renderDashboard)
[!IMPORTANT] Linux con BTF:
CONFIG_DEBUG_INFO_BTF=yyCONFIG_DEBUG_INFO_BTF_MODULES=y. Viene activado por defecto en Arch, Fedora, Ubuntu y Debian 12+ actuales. CO-RE significa que no es necesario recompilar para cada kernel.
cfg80211/mac80211 (cualquier tarjeta Wi-Fi normal en Linux).curl -fsSL https://yeet.cx | sh lo instala.[!NOTE] Lo que airtop no hace:
tx_status aparte.fentry son estables en la práctica pero no son una ABI del kernel; los datos exactos dependen de tu driver Wi-Fi.¿Esto necesita modo monitor? No. Ese es el punto. airtop engancha la pila Wi-Fi del kernel desde dentro, así que funciona en tu interfaz normal conectada.
¿Caerá mi conexión? No. No hay cambio de modo; tu interfaz permanece asociada a lo que ya está asociada. airtop está observando lo que el kernel ya está haciendo.
¿Por qué solo veo una o dos redes?
Porque tu radio está escuchando un solo canal (el suyo) la mayor parte del tiempo. Las redes vecinas aparecen cuando tu sistema operativo hace escaneos periódicos, o cuando fuerzas uno con nmcli dev wifi rescan / iw dev <iface> scan. Un estudio de banda completa requiere modo monitor + salto de canal, lo cual es otra herramienta.