
network-monitor v0.7.5
Uno strumento di monitoraggio delle connessioni di rete in tempo reale costruito con Rust e GTK4, che mostra le connessioni attive con statistiche I/O in tempo reale in un'interfaccia grafica moderna.
Monitor di Rete

Uno strumento di monitoraggio delle connessioni di rete in tempo reale costruito con Rust e GTK4, che mostra le connessioni attive con statistiche I/O in tempo reale in un'interfaccia grafica moderna.
Caratteristiche
- 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: Mostra il programma e il PID associato a ogni connessione
- 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)
- Filtraggio delle connessioni: Filtra le connessioni localhost per un output più pulito
- Integrazione con GNOME: Supporto corretto della classe WM per il fissaggio nella dock e integrazione desktop
- Doppia installazione: Supporta installazione sia utente-locale che a livello di sistema
- Gestione robusta degli errori: Recupero completo degli errori con chiara guida alla configurazione
- Ottimizzato per le prestazioni: Caching dei processi e caching del layout per una migliore reattività
Requisiti
- Rust 1.70+ (edizione 2021)
- Librerie di sviluppo GTK4
- Librerie di sviluppo Libadwaita
- Sistema Linux con filesystem
/proc - Linux 5.8+ (per funzionalità 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: Installare dal sorgente con integrazione desktop
- Clonare il repository:
git clone <repository-url>
cd network-monitor
- Installare localmente (senza sudo):
./scripts/install.sh
- Oppure installare 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 classe WM corretta per il fissaggio nella dock di GNOME
- Installa le icone nelle directory appropriate
- Aggiorna la cache delle icone e il database del desktop
- Assicura che l'applicazione possa essere fissata nella dock/dashboard di GNOME
Metodo 2: Compilare ed eseguire direttamente
- Clonare il repository:
git clone <repository-url>
cd network-monitor
- Compilare ed eseguire:
cargo run
Oppure compilare in modalità release:
cargo build --release
./target/release/network-monitor
Metodo 3: Compilare ed eseguire la versione TUI
- Clonare il repository:
git clone <repository-url>
cd network-monitor
- Compilare ed eseguire la TUI:
cargo build --bin nmt
./target/debug/nmt
Oppure compilare 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 rimuoverà il binario, il file desktop e le icone dalle posizioni appropriate e aggiornerà tutte le cache pertinenti.
Utilizzo
Interfaccia grafica GTK4
Avviare l'applicazione di monitoraggio della rete:
cargo run
L'applicazione aprirà una finestra GTK4 che mostra:
- Processo(ID): Nome del processo e PID con mappatura accurata socket-processo
- Protocollo: Protocollo TCP/UDP
- Sorgente: Endpoint locale (risolto in formato leggibile)
- Destinazione: Endpoint remoto (risolto in formato leggibile)
- Stato: 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
- Percorso: Percorso completo del comando e argomenti da
/proc/[pid]/cmdline
Interfaccia terminale (TUI)

Avviare l'interfaccia terminale:
cargo run --bin nmt
La TUI fornisce le stesse capacità di monitoraggio in un'interfaccia terminale interattiva:
Controlli principali:
q- Esci dall'applicazioner- Aggiorna manualmente le connessionia- Attiva/disattiva aggiornamento automatico (intervallo di 2 secondi)↑/↓- Naviga tra le connessioni←/→- Scorri la tabella orizzontalmente1-8- Ordina per colonne (Processo(ID), Protocollo, Sorgente, Destinazione, Stato, TX, RX, Percorso)
Caratteristiche:
- 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 della connessione attiva
- Informazioni su processo e PID
- Visualizzazione delle 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*:*→ANY127.0.0.1:*o[::1]:*→LOCALHOST224.0.0.251:*→MDNS
Come Funziona
Backend eBPF (basato su eventi)
L'app utilizza kprobes a livello kernel (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) invece del polling di /proc/net. Questo fornisce:
- Basato su eventi: Consegna degli eventi in sub-millisecondi, nessun overhead di polling (~1-3% CPU)
- PID diretto: Acquisito al punto di probe tramite
bpf_get_current_pid_tgid(), nessuna scansione di inode - Connessioni di breve durata: Mai perse tra gli intervalli di polling
Modalità eBPF
Il backend eBPF fornisce monitoraggio delle connessioni basato su eventi con overhead ridotto ed eventi
in tempo reale, rispetto all'approccio predefinito di polling /proc/net. Può catturare connessioni di breve durata
che il polling potrebbe perdere.
Prerequisiti:
rustup toolchain install nightly
cargo install bpf-linker
Compilare ed eseguire:
cargo build
Eseguire come utente normale (kernel 5.8+ richiesto):
Assegnare le capacità Linux richieste al binario una volta:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor
./target/debug/network-monitor
O per la versione TUI:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt
./target/debug/nmt
Per le build release, regolare il percorso di conseguenza:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
L'app uscirà con un messaggio di configurazione se eBPF non è disponibile (capacità mancanti o kernel non supportato).
Architettura
- GTK4: Framework GUI moderno e multipiattaforma
- Libadwaita: Componenti UI in stile GNOME
- Tokio: Runtime asincrono per operazioni concorrenti
- Aya + eBPF: Tracciamento delle connessioni a livello kernel con kprobes per eventi in tempo reale
- PID diretto: Identificazione dei processi tramite
bpf_get_current_pid_tgid()al punto di probe - Chiamate di sistema: Lettura diretta di
/proc/[pid]/ioper le statistiche I/O - Gestione degli errori: Tipi di errore completi con recupero graduale utilizzando
thiserror - Caching delle prestazioni: Caching del layout UI per prestazioni ottimali
Pacchetti Linux
Donazioni
Se trovi utile questo progetto, considera di fare una donazione per supportarne lo sviluppo.
- Monero:
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv - Bitcoin:
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
Licenza
Questo progetto è open source. Vedi il file LICENSE per i dettagli.