
Monitoreo de red por proceso para tu terminal con inspección profunda de paquetes. Multiplataforma, en sandbox.
Visibilidad en tiempo real de cada conexión que realiza tu máquina, quién la posee y qué protocolo utiliza. Sin tcpdump, reenvío de X11 ni tuberías con root.
netstat / ss no pueden mostrar el estado en vivo.--pcapng-export escribe una captura lista para Wireshark con proceso, PID, dirección, DPI/SNI y GeoIP incrustados como comentarios por paquete. Ábrela en Wireshark y cada paquete ya nombra su proceso propietario, sin post-procesamiento. También está disponible la exportación clásica --pcap-export con un archivo lateral JSONL para correlación fuera de línea.t para mantener visibles las conexiones históricas (cerradas) para análisis forense.port:, src:, dst:, sni:, process:, state:, proto:, además de regex mediante /(?i)patrón/.kubernetes): conexiones asignadas a su pod, namespace y contenedor, mostradas en el panel de detalles, exportaciones JSON/PCAPNG y los filtros pod:, ns:, container:. Habilitada en la imagen oficial de Docker; en un clúster, usa el plugin kubectl-rustnet para ejecutarlo como un pod de depuración efímero. Consulta USAGE.md.RustNet llena el vacío entre las herramientas simples de conexión (netstat, ss) y los analizadores de paquetes (Wireshark, tcpdump):
RustNet complementa las herramientas de captura de paquetes. Usa RustNet para ver qué está haciendo conexiones. Para inspección directa con Wireshark, --pcapng-export escribe comentarios de paquetes en vivo con contexto de PID/proceso. Para correlación en tiempo de limpieza, usa --pcap-export junto con el archivo lateral JSONL y el opcional scripts/pcap_enrich.py. Consulta Exportación PCAP y Comparación con herramientas similares para más detalles.
Construido sobre ratatui, libpcap, eBPF (libbpf-rs), DashMap, crossbeam, ring, MaxMind GeoLite2 y Landlock. Consulta ARCHITECTURE.md para el desglose completo de dependencias.
RustNet usa programas eBPF del kernel por defecto en Linux para un rendimiento mejorado e identificación de procesos con menor sobrecarga.
Nombres de procesos:
comm (un campo del kernel limitado a 16 caracteres) en lugar del nombre del hilo en ejecución, por lo que las aplicaciones multihilo muestran el nombre del proceso principal en lugar de nombres de hilos como "Socket Thread"/proc/<tgid>/comm, recupera nombres truncados por comm desde el nombre del archivo ejecutable (por ejemplo, "chromium-browse" se convierte en "chromium-browser") y resuelve la ruta completa del ejecutable mostrada en la vista de DetallesComportamiento de respaldo:
Para deshabilitar eBPF y usar solo el modo procfs, compila con:
cargo build --release --no-default-features
Consulta ARCHITECTURE.md para información técnica.
RustNet combina la contabilidad de tráfico a nivel de proceso con estadísticas de interfaz de red en tiempo real:
3): Clasifica procesos por Egreso (TX) o Ingreso (RX), incluyendo tráfico retenido y continuo, tasas, participaciones, conexiones y destinosi en Actividad): Muestra las métricas integrales originales para cada interfazConsulta USAGE.md para documentación detallada sobre la interpretación de estadísticas de interfaz y el comportamiento específico de cada plataforma.
Métricas disponibles:
Las estadísticas se recopilan cada 2 segundos en un hilo en segundo plano con impacto mínimo en el rendimiento.
| Resumen Tabla de conexiones con estadísticas en vivo y sparklines ![]() | Detalles SNI por conexión, cifrado, GeoIP, DPI ![]() |
| Gráfico Gráfico de tráfico, distribución de aplicaciones, procesos principales ![]() | Actividad Egreso/ingreso de procesos, cobertura de 60 segundos, atribución y pares remotos ![]() |
Homebrew (macOS / Linux):
brew install rustnet
Ubuntu (22.04 LTS+) / Linux Mint 21+ / Pop!_OS 22.04+:
sudo add-apt-repository ppa:domcyrus/rustnet
# en Pop!_OS: sudo apt-manage add ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet
Fedora (42+):
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet
openSUSE Tumbleweed:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/domcyrus:/rustnet/openSUSE_Tumbleweed/home:domcyrus:rustnet.repo
sudo zypper refresh
sudo zypper install rustnet
Arch Linux:
sudo pacman -S rustnet
Nix / NixOS:
nix-shell -p rustnet
# Luego dentro del shell: sudo rustnet
Desde crates.io:
cargo install rustnet-monitor
Windows (Chocolatey):
# Ejecutar en PowerShell como Administrador
# Requiere Npcap (https://npcap.com) instalado con "Modo compatible con API WinPcap" habilitado
choco install rustnet
Otras plataformas:
La captura de paquetes requiere privilegios elevados:
# Inicio rápido (todas las plataformas)
sudo rustnet
# Linux: Otorga capacidades para ejecutar sin sudo (recomendado)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet
Opciones comunes:
rustnet -i eth0 # Especificar interfaz de red
rustnet --show-localhost # Mostrar conexiones de localhost
rustnet --no-resolve-dns # Deshabilitar resoluciones DNS inversas (habilitadas por defecto)
rustnet -r 500 # Establecer intervalo de actualización (ms)
rustnet --theme tokyo-night # Tema: muted (predeterminado), vivid, catppuccin-mocha, tokyo-night, gruvbox, nord
rustnet --pcapng-export capture.pcapng # PCAPNG anotado para Wireshark
El tema y las anulaciones por color también se pueden configurar en ~/.config/rustnet/config.toml; --theme tiene prioridad. Consulta USAGE.md para el esquema.
Consulta INSTALL.md para la configuración detallada de permisos y USAGE.md para todas las opciones.
Si configuras las capacidades pero la TUI aún muestra
eBPF unavailable, consulta eBPF no disponible a pesar de que las capacidades estén configuradas en la sección de solución de problemas.
| Tecla | Acción |
|---|---|
q | Salir (presiona dos veces para confirmar) |
Ctrl+C | Salir inmediatamente |
x | Borrar todas las conexiones (presiona dos veces para confirmar) |
Tab o ] | Siguiente pestaña |
Shift+Tab o [ | Pestaña anterior |
1–5 | Ir a Resumen / Detalles / Actividad / Gráfico / Ayuda |
↑/k ↓/j | Navegar arriba/abajo |
g G | Ir a la primera/última conexión |
Enter | Ver detalles de la conexión |
Esc | Volver atrás o borrar filtro |
c | Copiar dirección remota |
p | Alternar nombres de servicios/puertos |
d | Alternar nombres de host/IPs en Resumen o Egreso/Ingreso en Actividad |
s S | Ciclar columnas de ordenación / alternar dirección |
a | Alternar agrupación por proceso |
Espacio | Expandir/contraer grupo de procesos |
←/→ o h/l | Contraer/expandir grupo |
PageUp/PageDown o Ctrl+B/F | Navegación de páginas |
t | Alternar conexiones históricas (cerradas) |
i | Alternar información del sistema en Resumen o detalles de interfaz en Actividad |
r | Restablecer vista (agrupación, ordenación, filtro) |
/ |
Consulta USAGE.md para controles de teclado detallados y consejos de navegación.
Ejemplos rápidos de filtrado:
/google # Buscar "google" en cualquier lugar
/port:443 # Filtrar por puerto
/process:firefox # Filtrar por proceso
/state:established # Filtrar por estado de conexión
/dport:443 sni:github.com # Combinar filtros
Ordenación:
s para ciclar entre columnas ordenables (Proceso, Direcciones, Servicio, Aplicación, Estado, Ancho de banda)S (Shift+s) para alternar la dirección de ordenacións hasta que aparezca "Ancho de banda Total ↓" (ordena por velocidad combinada de subida+bajada)Consulta USAGE.md para la sintaxis completa de filtrado y la guía de ordenación.
Filtros por palabra clave:
port:44 - Puertos que contienen "44" (443, 8080, 4433)sport:80 - Puertos de origen que contienen "80"dport:443 - Puertos de destino que contienen "443"src:192.168 - IPs de origen que contienen "192.168"dst:github.com - Destinos que contienen "github.com"process:ssh - Nombres de proceso que contienen "ssh"sni:api - Nombres de host SNI que contienen "api"app:openssh - Conexiones SSH que usan OpenSSHstate:established - Filtrar por estado de protocoloproto:tcp - Filtrar por tipo de protocoloFiltrado por estado:
state:syn_recv - Conexiones semiabiertas (detección de inundación SYN)state:established - Solo conexiones establecidasstate:quic_connected - Conexiones QUIC activasstate:dns_query - Conexiones de consulta DNSEjemplos combinados:
sport:80 process:nginx - Conexiones Nginx desde el puerto 80dport:443 sni:google.com - HTTPS hacia Googleprocess:firefox state:quic_connected - Conexiones QUIC de Firefoxdport:22 app:openssh state:established - Conexiones OpenSSH establecidasRustNet usa tiempos de espera inteligentes y advertencias visuales antes de eliminar conexiones:
Indicadores visuales de obsolescencia:
Tiempos de espera conscientes del protocolo:
Initial/Handshaking: 60 segundosEjemplo: Una conexión HTTP se vuelve amarilla a los 7.5 min, roja a los 9 min y se elimina a los 10 min.
Consulta USAGE.md para detalles completos de los tiempos de espera.
¡Las contribuciones son bienvenidas! Consulta CONTRIBUTING.md para las pautas sobre cómo contribuir.
Consulta CONTRIBUTORS.md para la lista de personas que han contribuido a este proyecto.
Este proyecto está licenciado bajo la Licencia Apache, Versión 2.0 - consulta el archivo LICENSE para más detalles.
Algunas secciones se han movido a archivos dedicados para una mejor organización:
| Entrar en modo filtro |
h | Alternar ayuda |