
Diagnósticos de red en tiempo real en tu terminal. Un comando, cero configuración, visibilidad instantánea.
Ve lo que tu red está haciendo realmente — en vivo, en tu terminal.
Un monitor de red que lee el tráfico cifrado, identifica el proceso detrás de cada conexión y detecta malware que se comunica con su centro de mando. Un solo binario. Cero configuración.
Todo a la vez, con cero líneas de interfaz — sin barra de encabezado, sin barra de menú, sin barra de estado. La descarga crece hacia arriba desde el eje de tiempo compartido, la subida crece hacia abajo, de modo que la simetría del tráfico es una forma que reconoces antes de leer un número. El color codifica magnitud, no series.
…y el instrumento predeterminado de diez pestañas debajo de él, a una tecla V de distancia y compartiendo los mismos recolectores ya en marcha: el panel de control, el programa detrás de cada socket, la inspección profunda de paquetes, el mapa de red y con qué habla cada programa.
La mayoría de las herramientas de red responden a una pregunta — «¿qué está usando mi ancho de banda?» — y se detienen. NetWatch sigue adelante. Decodifica los protocolos en el cable, te dice qué programa abrió cada conexión y vigila los patrones que indican problemas: un escaneo de puertos, malware haciendo balizamiento hacia un servidor de mando y control, datos saliendo sigilosamente a través de DNS. Cuando algo parece sospechoso, una pulsación de tecla congela un paquete de evidencia portátil que puedes adjuntar a un informe de error.
Piénsalo como un solo binario sin configuración que hace el trabajo de un medidor de ancho de banda, la vista de triaje de Wireshark y un detector de intrusiones ligero — sin salir de la terminal.
Se adapta a la pregunta que haces — en ambas direcciones: --view dense llena una terminal grande con cuatro cajas sin interfaz, y netwatch --lite es una pantalla de 80×24 para «¿qué está usando mi red ahora mismo?»; la vista completa de diez pestañas está ahí cuando la respuesta es «algo que necesito investigar» — a una pulsación de distancia, compartiendo la misma captura en vivo.
Hecho para miembros de equipos azules, respondedores de incidentes, SRE y aficionados al homelab que necesitan ver lo que está pasando ahora mismo — no parsear un archivo de captura una hora después.
650+ pruebas · con sandbox de Landlock (Linux) · analiza tráfico hostil de forma segura
Y la parte que ninguna otra herramienta de terminal hace: NetWatch aprende con qué habla cada programa de la máquina, convierte esa línea base observada en una política con una pulsación de tecla y te avisa en el momento en que un programa empieza a hablar con un destino nuevo.
Observa → promueve → advierte. La línea base se convierte en política con una pulsación de tecla; el siguiente destino nuevo llega como deriva.
SSLKEYLOGFILE de un navegador o aplicación a NetWatch y observa cómo se decodifica en vivo el texto plano de sus sesiones TLS 1.3, igual que hace Wireshark. Sin proxy, sin certificados, nada en el medio.curl solía llegar solo a api.github.com, y hoy llegó a otra cosa. Solo observación — nunca bloquea.ss/lsof, con una kprobe eBPF opcional a nivel de kernel (Linux, la función ebpf) que también captura flujos de corta duración que el sondeo puede pasar por alto. Funciona en todas partes; la kprobe es una mejora, no un requisito.Sin archivos de configuración. Sin instalación. Sin banderas requeridas.```bash brew install netwatch # macOS / Linux nix-shell -p netwatch # NixOS / Nix paru -S netwatch-tui-bin # Arch (prebuilt; netwatch-tui builds from source) scoop install netwatch # Windows cargo install netwatch-tui # anywhere with Rust
O descarga un binario precompilado desde [Lanzamientos](https://github.com/matthart1983/netwatch/releases/latest).
**Windows necesita [Npcap](https://npcap.com/#download) instalado** — los valores predeterminados del instalador son correctos, y sin él NetWatch se cierra al iniciar indicándolo. **Compilar desde el código fuente** (`cargo install`, `paru -S netwatch-tui`) requiere los encabezados de desarrollo de libpcap: `libpcap-dev` en Debian/Ubuntu y Alpine, `libpcap-devel` en Fedora/RHEL, `libpcap` en Arch. Si faltan, aparece `cannot find -lpcap` en tiempo de enlace. macOS incluye libpcap; los binarios `-static` de Linux que se muestran abajo lo incluyen y no necesitan nada instalado.
Los paquetes de Nix, Arch y Scoop son mantenidos por empaquetadores de la comunidad — gracias. Reporta
los problemas de empaquetado con ellos; reporta los errores de netwatch aquí. Si un paquete se retrasa respecto a una versión, la
[página de Repology](https://repology.org/project/netwatch-tui/versions) lo muestra.
<details>
<summary><strong>Todas las plataformas y compilación desde el código fuente</strong></summary>
| Plataforma | Descarga |
|----------|----------|
| Linux (x86_64, Debian/Ubuntu) | [`netwatch-linux-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (aarch64, Debian/Ubuntu) | [`netwatch-linux-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (x86_64, estático — Arch/Fedora/Alpine/cualquier distro) | [`netwatch-linux-x86_64-static.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (aarch64, estático — Arch/Fedora/Alpine/cualquier distro) | [`netwatch-linux-aarch64-static.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| macOS (Intel) | [`netwatch-macos-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| macOS (Apple Silicon) | [`netwatch-macos-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Windows (x86_64) | [`netwatch-windows-x86_64.exe.zip`](https://github.com/matthart1983/netwatch/releases/latest) |
Las compilaciones `-static` de Linux incluyen libpcap y no tienen dependencias en tiempo de ejecución — úsalas en Arch, Fedora, Alpine o cualquier distro donde las compilaciones predeterminadas reporten `libpcap.so.0.8: cannot open shared object file`.
La compilación de Windows requiere [Npcap](https://npcap.com/#download) — instálalo antes de la primera ejecución. Los valores predeterminados del instalador son correctos: NetWatch busca en `System32\Npcap`, donde Npcap realmente coloca `wpcap.dll`, por lo que *Install Npcap in WinPcap API-compatible Mode* no es necesario. Si no hay Npcap en absoluto, obtienes un mensaje de NetWatch indicando lo que falta, no un cuadro de error de Windows. (En v0.29.1 y anteriores sí necesitabas esa casilla — ver [#47](https://github.com/matthart1983/netwatch/issues/47).)
**Desde el código fuente:**```bash
git clone https://github.com/matthart1983/netwatch.git && cd netwatch
cargo build --release
Requisitos previos: Rust 1.70+ y los encabezados de desarrollo de libpcap. Lo mismo se aplica a cargo install netwatch-tui.
Sin ellos, la compilación falla en el enlazado con /usr/bin/ld: cannot find -lpcap. Si solo quieres ejecutar NetWatch en lugar de compilarlo, los binarios Linux -static anteriores no necesitan nada de esto.
netwatch # interface stats, connections, config — no privileges needed sudo netwatch # full mode — adds live packet capture + health probes
Eso es todo. Cambia de pestaña con `1`–`9`, pulsa `?` para la ayuda, `q` para salir. El panel es útil en cinco segundos; todo lo que hay debajo está ahí cuando necesites profundizar.
> **Linux sin `sudo`:** concede las capacidades de captura una vez y ejecuta como tu usuario normal —
> `sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' "$(which netwatch)"`. Vuelve a ejecutarlo tras cada actualización ([detalles](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#running-without-sudo-linux)).
### Ver cómo descifra TLS en 60 segundos
La forma más rápida de entender qué es NetWatch — míralo leer el texto plano de una sesión TLS 1.3 *que tú controlas*:```bash
sudo netwatch # 1. launch, then open the Packets tab (4)
SSLKEYLOGFILE=/tmp/sslkeylog.txt curl https://example.com # 2. any client that exports its keys
# 3. filter the Packets tab with: decrypted:true
Los datos de aplicación descifrados se muestran en línea. Un fallo del keylog nunca interrumpe la captura: ese registro simplemente permanece opaco. (SSLKEYLOGFILE es el mismo mecanismo que usa Wireshark; solo funciona con tráfico que tú controlas, nunca con tráfico de terceros ni malware).
Leyendo el texto plano de una sesión TLS 1.3 en vivo — descifrada directamente en la terminal. Sin proxy, sin hombre en el medio.
El bucle de la demo anterior, en tres comandos:```bash sudo netwatch # 1. launch and open the Egress tab (0). Leave it a minute # while it learns; each process grows a list of destinations # with hostnames, autonomous systems and ports # 2. put the cursor on a process and press Enter — its observed # baseline becomes a rule in egress-policy.toml curl https://example.org # 3. same program, somewhere it has never been
El nuevo destino aterriza con un veredicto `✗ drift` y una alerta. No se bloqueó nada — el punto es que se te *avisó*.
Los veredictos son deliberadamente no binarios:
| | |
|---|---|
| `✓ sni` / `✓ ip` | Coincidió con un hostname o dirección declarados — preciso |
| `~ asn` | Coincidió solo por sistema autónomo — eso admite *todo lo que opera ese AS*, que para un hiperescalador es efectivamente ilimitado |
| `? ech` | Encrypted ClientHello: el nombre está oculto por diseño, por lo que es "no se puede juzgar", no "malo" |
| `✗ drift` | Fuera de la lista de permitidos |
| `— no rule` | Este programa nunca fue declarado — no se comprobó nada |
| `✗ undeclared` | Sin regla, bajo `strict = true` — la política afirma ser completa, por lo que la *ausencia* es el hallazgo |
Las reglas aceptan hostnames exactos, `*.wildcards`, sistemas autónomos, bloques CIDR (`10.0.0.0/8`) y puertos. `strict = true` es lo que convierte al linter de "dime cuándo mi software declarado se comporta mal" en "dime cuándo algo que nunca declaré empieza a hablar" — que es la forma que adopta una intrusión real.
## Lo que obtienes
Diez pestañas, que se cambian con `1`–`9` y `0`:
| # | Pestaña | Qué muestra |
|---|-----|---------------|
| 1 | **Panel** | Interfaces, gráfica de ancho de banda, conexiones principales, salud de gateway/DNS, mapa de calor de latencia. Útil en 5 segundos. |
| 2 | **Conexiones** | Cada socket con su proceso + PID, protocolo, estado, GeoIP y minigráficos de latencia. |
| 3 | **Interfaces** | IPv4/IPv6 por interfaz, MAC, MTU, RX/TX, errores, descartes. |
| 4 | **Paquetes** | Captura en vivo con decodificación L7 real, descifrado TLS 1.3, JA4, seguimiento de streams por flujo, filtros, exportación PCAP. |
| 5 | **Estadísticas** | Desglose de protocolos por bytes + histograma de tiempos de handshake TCP. |
| 6 | **Topología** | Mapa ASCII de la máquina → gateway → DNS → hosts principales, con traceroute. |
| 7 | **Línea de tiempo** | Cronología de conexiones codificada por colores según el estado TCP; las alertas de seguridad llegan aquí. |
| 8 | **Procesos** | Ranking de ancho de banda por proceso con RX/TX en vivo y conteos de conexiones. |
| 9 | **Perspectivas** | *(opt-in)* envía una instantánea a un LLM local o en la nube para un análisis en lenguaje natural. |
| 0 | **Egreso** | Aprende con qué se comunica cada proceso (hostname/AS/puerto), promueve esa línea base a una política con una sola pulsación y luego advierte sobre desviaciones. Solo observación, nunca bloquea. |
La pestaña Paquetes es donde vive la parte forense — decodificación profunda de protocolos, descifrado TLS 1.3 en vivo, caza de amenazas con JA4, filtros de visualización estilo Wireshark y captura de incidentes. **[Consulta la referencia completa de funciones →](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md)**
### Vista ligera
Diez pestañas son un instrumento de operador. Cuando la pregunta es solo *"¿qué está usando mi red, y mi conexión está bien?"* — una máquina, una sesión SSH a una Pi, un split de tmux — está `--lite`:```bash
netwatch --lite # one screen, fits 80×24
Una pantalla, seis teclas. Rendimiento en vivo, alcance y quién está hablando: expande cualquier fila en su lugar, filtra mientras escribes.
Todo en una sola pantalla: gráficos de rendimiento en vivo, alcance de puerta de enlace/DNS/internet y los principales emisores por proceso y host. Seis teclas — q salir, p pausar, / filtrar, ↵ expandir un emisor, L volver a la vista completa, ? ayuda.
Pulsa L desde cualquiera de las vistas para alternar. Ambas comparten los mismos recopiladores, de modo que pasar de "algo no cuadra" a la vista forense completa de diez pestañas cuesta una sola pulsación de tecla: sin reinicio, sin historial perdido y con la captura aún en marcha.
La otra dirección: cuando tienes una terminal grande y quieres todo a la vez, --view dense la llena con cuatro recuadros y sin adornos: sin barra de cabecera, sin barra de menú, sin barra de estado. La identidad, el estado de ordenación, el rango de páginas y cada atajo de teclado viven dentro de los bordes de los recuadros, de modo que cada fila lleva datos. Necesita 130×44 como mínimo y crece hasta ocupar lo que le des: más ancho significa más historial en los gráficos y espacio para nombres de host completos; más alto significa más interfaces y más conexiones.```bash
netwatch --view dense # four boxes, needs 130×44
Esa es la pantalla que aparece al principio de este README. El elemento característico es el **grafo dual espejado**: la descarga crece hacia arriba desde un eje de tiempo central, y la subida crece hacia abajo desde el mismo eje. La simetría del tráfico se convierte en una forma que reconoces sin leer un número: una ráfaga de descarga es un acantilado por encima de la línea, una copia de seguridad es un acantilado por debajo. Ambas mitades son braille a dos muestras por celda de carácter, y cada celda se colorea por su **altura en el grafo** y no por la serie a la que pertenece, de modo que ves la gravedad de un pico antes de medirlo contra el eje.
Las rampas de rendimiento pasan de frío a brillante porque un ancho de banda alto es *actividad*, no *problema*: un enlace saturado durante una copia de seguridad está trabajando. Solo los valores acotados donde lo alto sí es malo — saturación del enlace, presupuesto de latencia por salto — reciben el tratamiento verde→ámbar→rojo, y sus medidores se colorean por la posición a lo largo de la barra, de modo que la zona roja es visible antes de llegar a ella.
Debajo del grafo: tasas por interfaz con minigráficos de 60 segundos, presupuestos de latencia de cuatro saltos (puerta de enlace, DNS, internet y el peer más lento con el que realmente estás hablando), y la tabla de conexiones con los detalles de la fila seleccionada elevados a la parte superior de esa misma caja: sin pantalla nueva, sin botón de retroceder. La fila de detalle incluye el estado TCP del kernel — `cwnd`, `ssthresh`, `mss`, `rwnd` — leído directamente del kernel: `inet_diag` sobre netlink en Linux, el sysctl `net.inet.tcp.pcblist64` en macOS. Los dos kernels discrepan sobre las unidades (Linux cuenta segmentos, BSD cuenta bytes), así que los valores de macOS se normalizan contra el MSS y la columna significa lo mismo en ambos. Windows muestra `--` hasta que se conecte `GetPerTcpConnectionEStats`.
`V` alterna `full → lite → dense`, o ajústalo una vez en **Ajustes → Ver**. Por debajo de 130×44 cae a la misma cuadrícula de 80×24 que apunta Lite — que también llena su área — y nunca se desplaza lateralmente.
## Inmersiones más profundas
| Guía | Qué contiene |
|-------|--------------|
| **[Referencia de funciones](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md)** | Cada combinación de teclas, el lenguaje de filtros de visualización, la lista de decodificadores de protocolo, los temas y las opciones de configuración. |
| **[Descifrado TLS 1.3](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#tls-13-decryption)** | Cómo funciona el descifrado con `SSLKEYLOGFILE`, los conjuntos de cifrado compatibles y qué puede y qué no puede leer. |
| **[Búsqueda de amenazas con JA4](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#threat-hunting-with-ja4)** | Identificación por huella de clientes y pivoteo entre flujos. |
| **[Seguridad y el sandbox Landlock](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#security--forensics)** | El modelo de amenazas, la eliminación de capacidades y la lista de permisos del sistema de archivos. |
| **[Linting de políticas de salida](https://github.com/matthart1983/netwatch/blob/HEAD/docs/egress-linter-plan.md)** | El modelo observar → promover → avisar, el lenguaje de reglas, el modo `strict` y el esquema de exportación NDJSON. |
| **[Grabadora de vuelo](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#flight-recorder)** | Armado, congelación y el contenido de un paquete de incidentes. |
| **[Información con IA](https://github.com/matthart1983/netwatch/blob/HEAD/docs/INSIGHTS.md)** | Análisis opcional por LLM local/nube (desactivado por defecto). |
## Cómo funciona```
Raw bytes → Ethernet → IPv4/IPv6/ARP → TCP/UDP/ICMP → L7 decoders
↓
Per-flow stream tracking · Handshake timing
TLS 1.3 decryption · JA4 · Threat detection
Todo se degrada con elegancia: las funciones que necesitan privilegios elevados muestran un mensaje claro y recurren a alternativas, nunca se bloquean. Las notas completas de arquitectura están en WIKI.md.
Proyectos hermanos: SysWatch (sistema) y DiskWatch (disco) — el mismo marco, distinta superficie. ESSH — un cliente SSH en Rust puro con la misma estética TUI; conecta donde NetWatch observa.
NetWatch Cloud — monitoreo de flotas alojado para los servidores contra los que ejecutas NetWatch. Un pequeño agente Rust en cada host Linux, un panel en tiempo real y alertas por correo electrónico y Slack sobre latencia, pérdida de paquetes o hosts que se desconectan. Gratis mientras crecemos. El agente, el SDK y el panel son MIT; el backend alojado es propietario.
Empaquetadores. NetWatch está en homebrew-core, nixpkgs, el AUR y el bucket principal de Scoop — y yo no empaqueté ninguno. Cada uno de ellos fue hecho por alguien que encontró útil la herramienta, hizo el trabajo sin que se lo pidieran y la ha mantenido actualizada desde entonces. La entrada de Scoop suele seguir un lanzamiento a las pocas horas de la etiqueta.
Empaquetar es un trabajo ingrato que solo se nota cuando se rompe. Si instalas NetWatch a través de uno de estos, tienes que agradecérselo a ellos, no a mí.
Colaboradores. @lamchau, @fdncred y @PeteE han enviado parches. Gracias — una pull request de un desconocido es lo mejor que le puede pasar a un proyecto como este.
Y a todos los que han abierto un issue con una reproducción real, han debatido una decisión de diseño o me han dicho que la salida se veía mal en su terminal: ese es el ciclo de retroalimentación sobre el que se construye esto.
Las preguntas, ideas e informes de errores son bienvenidos en GitHub Discussions e Issues. Consulta CONTRIBUTING.md para las convenciones de código y WIKI.md para la guía de arquitectura.
MIT
api.github.com y la huella JA4, no solo «puerto 443»./etc/shadow.--lite responde «¿qué está usando mi red y está bien mi conexión?» en una sola pantalla de 80×24 con seis teclas, de modo que cabe en una sesión SSH a una Raspberry Pi o en una división de tmux. Una pulsación de tecla escala a la vista forense completa con los recolectores ya en marcha.| Plataforma | Instalación |
|---|
| Debian / Ubuntu | sudo apt install libpcap-dev |
| Fedora / RHEL | sudo dnf install libpcap-devel |
| Arch | sudo pacman -S libpcap |
| Alpine | sudo apk add libpcap-dev |
| macOS | incluido con el sistema |
| Windows | Npcap — la compilación descarga el SDK de Npcap automáticamente, o establece NPCAP_SDK a una copia extraída |
| Recopilador | macOS | Linux |
|---|
| Conexiones | lsof + PKTAP | /proc/net/tcp + eBPF kprobe |
| Paquetes | libpcap (BPF) | libpcap |
| Atribución de procesos | PKTAP | sondeo de lsof/ss, con superposición opcional de eBPF kprobe |
| Dominiquini | netwatch-tui en el AUR, desde marzo de 2026 |
| kemelzaidan | netwatch-tui-bin en el AUR |
| tomasrivera | netwatch en nixpkgs |
| scillidan | netwatch en el bucket principal de Scoop, desde v0.15.3 |
| Mantenedores de Homebrew | por llevar la fórmula al core, y el bot que ha seguido cada lanzamiento desde entonces |