
network-monitor v0.7.5
Una herramienta de monitoreo de conexiones de red en tiempo real construida con Rust y GTK4, que muestra conexiones activas con estadísticas de E/S en vivo en una interfaz gráfica moderna.
Network Monitor

Una herramienta de monitoreo de conexiones de red en tiempo real construida con Rust y GTK4, que muestra las conexiones activas con estadísticas de E/S en vivo en una interfaz gráfica moderna.
Características
- Monitoreo en tiempo real: Monitorea continuamente las conexiones de red activas
- Estadísticas de E/S: Muestra las tasas de subida/bajada en vivo para cada conexión
- Identificación de procesos: Muestra el programa y el PID asociados a cada conexión
- Acciones sobre procesos: Haz clic derecho en una fila para copiar su valor/comando o para matar el proceso que posee la conexión (Terminar o Forzar Cierre, con confirmación)
- Selección persistente: La fila seleccionada mantiene su resaltado entre actualizaciones y se muestra en la franja de estado
- Interfaz moderna GTK4: Interfaz gráfica limpia y responsiva con estilo Libadwaita
- Interfaz de terminal (TUI): Interfaz de terminal interactiva con las mismas capacidades de monitoreo
- Resolución de direcciones: Simplifica direcciones comunes (localhost, any, mDNS)
- Filtrado de conexiones: Filtra las conexiones localhost para una salida más limpia
- Integración con GNOME: Soporte adecuado de clase WM para anclar en el dock e integración con el escritorio
- Instalación dual: Soporta tanto la instalación local para el usuario como la instalación en todo el sistema
- Manejo robusto de errores: Recuperación integral de errores con guía de configuración clara
- Rendimiento optimizado: Caché de procesos y caché de diseño para mejorar la capacidad de respuesta
Requisitos
- Rust 1.70+ (edición 2021)
- Bibliotecas de desarrollo de GTK4
- Bibliotecas de desarrollo de Libadwaita
- Sistema Linux con sistema de archivos
/proc - Linux 5.8+ (para capacidades granulares de eBPF)
- Rust nightly y
bpf-linker(para la compilación de eBPF)
Instalación en Ubuntu/Debian:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
Instalación en Fedora:
sudo dnf install gtk4-devel libadwaita-devel
Instalación
Método 1: Instalar desde el código fuente con integración con el escritorio
- Clona el repositorio:
git clone <repository-url>
cd network-monitor
- Instala localmente (no se requiere sudo):
./scripts/install.sh
- O instala en todo el sistema (requiere sudo):
sudo ./scripts/install.sh
El script de instalación hará lo siguiente:
- Compilará los binarios de GTK4 y TUI (debug para local, release para todo el sistema)
- Instalará los binarios en
~/.local/bin/(local) o/usr/local/bin/(todo el sistema) - Instalará el archivo desktop con la clase WM adecuada para anclar en el dock de GNOME
- Instalará los iconos en los directorios de iconos correspondientes
- Actualizará la caché de iconos y la base de datos de escritorio
- Asegurará que la aplicación se pueda anclar al dock/panel de GNOME
Método 2: Compilar y ejecutar directamente
- Clona el repositorio:
git clone <repository-url>
cd network-monitor
- Compila y ejecuta:
cargo run
O compila en modo release:
cargo build --release
./target/release/network-monitor
Método 3: Compilar y ejecutar la versión TUI
- Clona el repositorio:
git clone <repository-url>
cd network-monitor
- Compila y ejecuta la TUI:
cargo build --bin nmt
./target/debug/nmt
O compila en modo release:
cargo build --release --bin nmt
./target/release/nmt
Desinstalación
Eliminar la versión instalada
Eliminación de la instalación local:
./scripts/uninstall.sh
Eliminación en todo el sistema (requiere sudo):
sudo ./scripts/uninstall.sh
El script de desinstalación eliminará el binario, el archivo desktop y los iconos de las ubicaciones correspondientes y actualizará todas las cachés relevantes.
Uso
Interfaz gráfica GTK4
Inicia la aplicación de monitoreo de red:
cargo run
La aplicación abrirá una ventana GTK4 que muestra:
- Process(ID): Nombre del proceso y PID con un mapeo preciso de socket a proceso
- Protocol: Protocolo TCP/UDP
- Source: Endpoint local (resuelto a un formato legible)
- Destination: Endpoint remoto (resuelto a un formato legible)
- Status: Estado de la conexión (ESTABLISHED, LISTEN, etc.)
- TX: Tasa de subida calculada a partir de las estadísticas de E/S del proceso
- RX: Tasa de bajada calculada a partir de las estadísticas de E/S del proceso
- Path: Ruta completa del comando y argumentos desde
/proc/[pid]/cmdline
Acciones de fila
- Clic izquierdo: selecciona una fila (también se muestra en la franja inferior)
- Clic derecho: abre el menú contextual con Copy Value, Copy Command y Kill "process" (PID), que pregunta si se desea Terminar (SIGTERM) o Forzar Cierre (SIGKILL)
- Delete: mata la fila actualmente seleccionada (mismo diálogo de confirmación)
- Ctrl+C: copia el contenido de la celda
- Botón Refresh en la barra de encabezado: actualiza inmediatamente (la lista también se actualiza cada 3s)
Interfaz de terminal (TUI)

Inicia la interfaz de terminal:
cargo run --bin nmt
La TUI proporciona las mismas capacidades de monitoreo en una interfaz de terminal interactiva:
Controles de teclado:
q- Salir de la aplicaciónr- Alternar la resolución de nombres de hostR- Actualizar las conexiones manualmentea- Alternar la actualización automática (intervalos de 2 segundos)↑/↓- Navegar por las conexiones←/→- Desplazar la tabla horizontalmentek/ clic derecho - Abrir el menú de matar para una fila (Terminar / Forzar Cierre / Cancelar)1-8- Ordenar por columnas (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path)
Ratón: el clic izquierdo selecciona una fila, el clic derecho la selecciona y abre el menú de matar.
Características:
- Monitoreo de conexiones en tiempo real con actualización automática
- Columnas ordenables con indicadores visuales
- Desplazamiento horizontal para tablas anchas
- Dimensionamiento inteligente de columnas - la última columna ocupa todo el ancho restante
- Protocolos codificados por colores (TCP/TCP6 en verde, UDP/UDP6 en amarillo)
- Resaltado de la conexión activa
- Información de proceso y PID
- Visualización de la tasa de E/S en vivo
- Mismo orden de columnas que la versión GTK4 para mantener la consistencia
Resolución de direcciones
Las direcciones comunes se simplifican para facilitar la lectura:
0.0.0.0:*o*:*→ANY127.0.0.1:*o[::1]:*→LOCALHOST224.0.0.251:*→MDNS
Cómo funciona
Backend eBPF (basado en eventos)
La aplicación utiliza kprobes a nivel del kernel (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) en lugar de hacer polling sobre /proc/net. Esto proporciona:
- Basado en eventos: Entrega de eventos en menos de un milisegundo, sin sobrecarga de polling (~1-3% de CPU)
- PID directo: Capturado en el punto de la sonda mediante
bpf_get_current_pid_tgid(), sin escaneo de inodos - Conexiones de corta duración: Nunca se pierden entre intervalos de polling