
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. [](https://github.com/grigio/network-monitor/actions/workflows/rust.yml) [](https://deps.rs/repo/github/grigio/network-monitor) ## 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: ```bash sudo apt update sudo apt install libgtk-4-dev libadwaita-1-dev ``` ### Instalación en Fedora: ```bash sudo dnf install gtk4-devel libadwaita-devel ``` ## Instalación ### Método 1: Instalar desde el código fuente con integración con el escritorio 1. Clona el repositorio: ```bash git clone <repository-url> cd network-monitor ``` 2. Instala localmente (no se requiere sudo): ```bash ./scripts/install.sh ``` 3. O instala en todo el sistema (requiere sudo): ```bash 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 1. Clona el repositorio: ```bash git clone <repository-url> cd network-monitor ``` 2. Compila y ejecuta: ```bash cargo run ``` O compila en modo release: ```bash cargo build --release ./target/release/network-monitor ``` ### Método 3: Compilar y ejecutar la versión TUI 1. Clona el repositorio: ```bash git clone <repository-url> cd network-monitor ``` 2. Compila y ejecuta la TUI: ```bash cargo build --bin nmt ./target/debug/nmt ``` O compila en modo release: ```bash cargo build --release --bin nmt ./target/release/nmt ``` ## Desinstalación ### Eliminar la versión instalada Eliminación de la instalación local: ```bash ./scripts/uninstall.sh ``` Eliminación en todo el sistema (requiere sudo): ```bash 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: ```bash 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: ```bash 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ón - `r` - Alternar la resolución de nombres de host - `R` - Actualizar las conexiones manualmente - `a` - Alternar la actualización automática (intervalos de 2 segundos) - `↑/↓` - Navegar por las conexiones - `←/→` - Desplazar la tabla horizontalmente - `k` / **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 `*:*` → `ANY` - `127.0.0.1:*` o `[::1]:*` → `LOCALHOST` - `224.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 ### Modo eBPF El backend eBPF proporciona un monitoreo de conexiones **basado en eventos** con menor sobrecarga y eventos en tiempo real, en comparación con el enfoque predeterminado de polling sobre `/proc/net`. Puede capturar conexiones de corta duración que el polling podría pasar por alto. **Requisitos previos:** ```bash rustup toolchain install nightly cargo install bpf-linker ``` **Compilar y ejecutar:** ```bash cargo build ``` **Ejecutar como usuario normal** (se requiere kernel 5.8+): Concede las capacidades de Linux necesarias al binario una vez: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor ./target/debug/network-monitor ``` O para la versión TUI: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt ./target/debug/nmt ``` Para compilaciones release, ajusta la ruta en consecuencia: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor ``` La aplicación saldrá con un mensaje de configuración si eBPF no está disponible (capacidades faltantes o kernel no compatible). ## Arquitectura - **GTK4**: Framework GUI moderno y multiplataforma - **Libadwaita**: Componentes de interfaz con estilo GNOME - **Tokio**: Runtime asíncrono para operaciones concurrentes - **Aya + eBPF**: Trazado de conexiones a nivel del kernel con kprobes para eventos en tiempo real - **PID directo**: Identificación de procesos mediante `bpf_get_current_pid_tgid()` en el punto de la sonda - **Llamadas al sistema**: Lectura directa de `/proc/[pid]/io` para estadísticas de E/S - **Manejo de errores**: Tipos de error integrales con recuperación elegante usando `thiserror` - **Caché de rendimiento**: Caché de diseño de la interfaz para un rendimiento óptimo ## Paquetes de Linux [](https://repology.org/project/network-monitor/versions) ## Donaciones Si encuentras útil este proyecto, considera hacer una donación para apoyar su desarrollo. - **Monero**: `88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv` - **Bitcoin**: `bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025` ## Licencia Este proyecto es de código abierto. Consulta el archivo LICENSE para más detalles.