Network Monitor

Uno strumento di monitoraggio delle connessioni di rete in tempo reale realizzato con Rust e GTK4, che visualizza le connessioni attive con statistiche I/O in tempo reale in un'interfaccia grafica moderna.

Funzionalità
- Monitoraggio in tempo reale: monitora continuamente le connessioni di rete attive
- Statistiche I/O: mostra le velocità di upload/download in tempo reale per ogni connessione
- Identificazione dei processi: visualizza il programma e il PID associati a ciascuna connessione
- Azioni sui processi: fai clic con il tasto destro su una riga per copiarne il valore/comando o per terminare il processo che
possiede la connessione (Terminate o Force Kill, con conferma)
- Selezione persistente: la riga selezionata mantiene la sua evidenziazione tra i vari aggiornamenti ed è mostrata nella
barra di stato
- Interfaccia GTK4 moderna: interfaccia grafica pulita e reattiva con stile Libadwaita
- Interfaccia terminale (TUI): interfaccia terminale interattiva con le stesse capacità di monitoraggio
- Risoluzione degli indirizzi: semplifica gli indirizzi comuni (localhost, any, mDNS)
- Filtro delle connessioni: filtra le connessioni localhost per un output più pulito
- Integrazione con GNOME: supporto corretto della WM class per il pinning nel dock e l'integrazione con il desktop
- Doppia installazione: supporta sia l'installazione locale all'utente che a livello di sistema
- Gestione robusta degli errori: recupero completo dagli errori con chiare indicazioni di configurazione
- Prestazioni ottimizzate: caching dei processi e del layout per una reattività migliorata
Requisiti
- Rust 1.70+ (edizione 2021)
- Librerie di sviluppo GTK4
- Librerie di sviluppo Libadwaita
- Sistema Linux con filesystem
/proc
- Linux 5.8+ (per le capacità granulari eBPF)
- Rust nightly e
bpf-linker (per la compilazione eBPF)
Installazione su Ubuntu/Debian:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
Installazione su Fedora:
sudo dnf install gtk4-devel libadwaita-devel
Installazione
Metodo 1: Installazione dal sorgente con integrazione desktop
- Clona il repository:
git clone <repository-url>
cd network-monitor
- Installa localmente (sudo non richiesto):
./scripts/install.sh
- Oppure installa a livello di sistema (richiede sudo):
sudo ./scripts/install.sh
Lo script di installazione:
- Compila sia i binari GTK4 che TUI (debug per locale, release per sistema)
- Installa i binari in
~/.local/bin/ (locale) o /usr/local/bin/ (sistema)
- Installa il file desktop con la WM class corretta per il pinning nel dock di GNOME
- Installa le icone nelle directory appropriate
- Aggiorna la cache delle icone e il database desktop
- Assicura che l'applicazione possa essere aggiunta al dock/dashboard di GNOME
Metodo 2: Compilazione ed esecuzione diretta
- Clona il repository:
git clone <repository-url>
cd network-monitor
- Compila ed esegui:
cargo run
Oppure compila in modalità release:
cargo build --release
./target/release/network-monitor
Metodo 3: Compilazione ed esecuzione della versione TUI
- Clona il repository:
git clone <repository-url>
cd network-monitor
- Compila ed esegui la TUI:
cargo build --bin nmt
./target/debug/nmt
Oppure compila in modalità release:
cargo build --release --bin nmt
./target/release/nmt
Disinstallazione
Rimuovere la versione installata
Rimozione dell'installazione locale:
./scripts/uninstall.sh
Rimozione a livello di sistema (richiede sudo):
sudo ./scripts/uninstall.sh
Lo script di disinstallazione rimuove il binario, il file desktop e le icone dalle posizioni appropriate e aggiorna tutte le cache rilevanti.
Utilizzo
Interfaccia grafica GTK4
Avvia l'applicazione di monitoraggio della rete:
cargo run
L'applicazione aprirà una finestra GTK4 che mostra:
- Process(ID): nome del processo e PID con una mappatura accurata socket-processo
- Protocol: protocollo TCP/UDP
- Source: endpoint locale (risolto in un formato leggibile)
- Destination: endpoint remoto (risolto in un formato leggibile)
- Status: stato della connessione (ESTABLISHED, LISTEN, ecc.)
- TX: velocità di upload calcolata dalle statistiche I/O del processo
- RX: velocità di download calcolata dalle statistiche I/O del processo
- Path: percorso completo del comando e argomenti da
/proc/[pid]/cmdline
Azioni sulle righe
- Clic sinistro: seleziona una riga (mostrata anche nella barra inferiore)
- Clic destro: apre il menu contestuale con Copy Value, Copy Command e
Kill "process" (PID), che chiede se Terminate (SIGTERM) o Force Kill (SIGKILL)
- Delete: termina la riga attualmente selezionata (stessa finestra di conferma)
- Ctrl+C: copia il contenuto della cella
- Pulsante Refresh nella barra dell'intestazione: aggiorna immediatamente (la lista si aggiorna anche ogni 3s)
Interfaccia terminale (TUI)

Avvia l'interfaccia terminale:
cargo run --bin nmt
La TUI fornisce le stesse capacità di monitoraggio in un'interfaccia terminale interattiva:
Controlli da tastiera:
q - Esce dall'applicazione
r - Attiva/disattiva la risoluzione dei nomi host
R - Aggiorna manualmente le connessioni
a - Attiva/disattiva l'aggiornamento automatico (intervalli di 2 secondi)
↑/↓ - Naviga tra le connessioni
←/→ - Scorri la tabella orizzontalmente
k / clic destro - Apre il menu di terminazione per una riga (Terminate / Force Kill / Cancel)
1-8 - Ordina per colonne (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path)
Mouse: il clic sinistro seleziona una riga, il clic destro la seleziona e apre il menu di terminazione.
Funzionalità:
- Monitoraggio delle connessioni in tempo reale con aggiornamento automatico
- Colonne ordinabili con indicatori visivi
- Scorrimento orizzontale per tabelle larghe
- Dimensionamento intelligente delle colonne - l'ultima colonna occupa tutta la larghezza rimanente
- Protocolli con codice colore (TCP/TCP6 in verde, UDP/UDP6 in giallo)
- Evidenziazione delle connessioni attive
- Informazioni su processo e PID
- Visualizzazione della velocità I/O in tempo reale
- Stesso ordine delle colonne della versione GTK4 per coerenza
Risoluzione degli indirizzi
Gli indirizzi comuni sono semplificati per la leggibilità:
0.0.0.0:* o *:* → ANY
127.0.0.1:* o [::1]:* → LOCALHOST
224.0.0.251:* → MDNS
Come funziona
Backend eBPF (event-driven)
L'app utilizza kprobe a livello kernel (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) invece del polling di /proc/net. Questo fornisce:
- Event-driven: consegna degli eventi in meno di un millisecondo, nessun overhead di polling (~1-3% CPU)
- PID diretto: catturato al punto di probe tramite
bpf_get_current_pid_tgid(), nessuna scansione degli inode
- Connessioni di breve durata: mai perse tra gli intervalli di polling
Modalità eBPF