Netzwerk-Monitor

Ein Echtzeit-Überwachungstool für Netzwerkverbindungen, entwickelt mit Rust und GTK4, das aktive Verbindungen mit Live-I/O-Statistiken in einer modernen grafischen Oberfläche anzeigt.

Funktionen
- Echtzeit-Überwachung: Überwacht kontinuierlich aktive Netzwerkverbindungen
- I/O-Statistiken: Zeigt Live-Upload-/Download-Raten für jede Verbindung an
- Prozessidentifikation: Zeigt das Programm und die PID an, die jeder Verbindung zugeordnet sind
- Prozessaktionen: Rechtsklick auf eine Zeile, um ihren Wert/Befehl zu kopieren oder den Prozess zu beenden, der
die Verbindung besitzt (Terminate oder Force Kill, mit Bestätigung)
- Persistente Auswahl: Die ausgewählte Zeile behält ihre Hervorhebung über Aktualisierungen hinweg und wird im
Statusstreifen angezeigt
- Moderne GTK4-Oberfläche: Saubere, reaktionsschnelle grafische Oberfläche mit Libadwaita-Styling
- Terminal-Oberfläche (TUI): Interaktive Terminal-Oberfläche mit denselben Überwachungsfunktionen
- Adressauflösung: Vereinfacht gängige Adressen (localhost, any, mDNS)
- Verbindungsfilterung: Filtert localhost-Verbindungen für eine übersichtlichere Ausgabe heraus
- GNOME-Integration: Ordnungsgemäße WM-Klassen-Unterstützung für Dock-Anheftung und Desktop-Integration
- Duale Installation: Unterstützt sowohl benutzerlokale als auch systemweite Installation
- Robuste Fehlerbehandlung: Umfassende Fehlerwiederherstellung mit klarer Einrichtungsanleitung
- Leistungsoptimiert: Prozess-Caching und Layout-Caching für verbesserte Reaktionsfähigkeit
Anforderungen
- Rust 1.70+ (2021 Edition)
- GTK4-Entwicklungsbibliotheken
- Libadwaita-Entwicklungsbibliotheken
- Linux-System mit
/proc-Dateisystem
- Linux 5.8+ (für eBPF-Granulare Fähigkeiten)
- Nightly Rust und
bpf-linker (für eBPF-Kompilierung)
Installation unter Ubuntu/Debian:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
Installation unter Fedora:
sudo dnf install gtk4-devel libadwaita-devel
Installation
Methode 1: Aus dem Quellcode mit Desktop-Integration installieren
- Repository klonen:
git clone <repository-url>
cd network-monitor
- Lokal installieren (kein sudo erforderlich):
./scripts/install.sh
- Oder systemweit installieren (erfordert sudo):
sudo ./scripts/install.sh
Das Installationsskript wird:
- Beide Binärdateien (GTK4 und TUI) erstellen (Debug für lokal, Release für systemweit)
- Binärdateien nach
~/.local/bin/ (lokal) oder /usr/local/bin/ (systemweit) installieren
- Desktop-Datei mit ordnungsgemäßer WM-Klasse für GNOME-Dock-Anheftung installieren
- Symbole in die entsprechenden Symbolverzeichnisse installieren
- Symbol-Cache und Desktop-Datenbank aktualisieren
- Sicherstellen, dass die Anwendung an das GNOME-Dock/Dashboard angeheftet werden kann
Methode 2: Direkt erstellen und ausführen
- Repository klonen:
git clone <repository-url>
cd network-monitor
- Erstellen und ausführen:
cargo run
Oder im Release-Modus erstellen:
cargo build --release
./target/release/network-monitor
Methode 3: TUI-Version erstellen und ausführen
- Repository klonen:
git clone <repository-url>
cd network-monitor
- TUI erstellen und ausführen:
cargo build --bin nmt
./target/debug/nmt
Oder im Release-Modus erstellen:
cargo build --release --bin nmt
./target/release/nmt
Deinstallation
Installierte Version entfernen
Lokale Installation entfernen:
./scripts/uninstall.sh
Systemweite Entfernung (erfordert sudo):
sudo ./scripts/uninstall.sh
Das Deinstallationsskript entfernt die Binärdatei, die Desktop-Datei und die Symbole aus den entsprechenden Verzeichnissen und aktualisiert alle relevanten Caches.
Verwendung
GTK4-Grafische Oberfläche
Starten Sie die Netzwerk-Monitor-Anwendung:
cargo run
Die Anwendung öffnet ein GTK4-Fenster, das Folgendes anzeigt:
- Process(ID): Prozessname und PID mit präziser Socket-zu-Prozess-Zuordnung
- Protocol: TCP/UDP-Protokoll
- Source: Lokaler Endpunkt (in lesbares Format aufgelöst)
- Destination: Remote-Endpunkt (in lesbares Format aufgelöst)
- Status: Verbindungszustand (ESTABLISHED, LISTEN, usw.)
- TX: Upload-Rate, berechnet aus Prozess-I/O-Statistiken
- RX: Download-Rate, berechnet aus Prozess-I/O-Statistiken
- Path: Vollständiger Befehlspfad und Argumente aus
/proc/[pid]/cmdline
Zeilenaktionen
- Linksklick: Eine Zeile auswählen (wird auch im unteren Streifen angezeigt)
- Rechtsklick: Das Kontextmenü mit Copy Value, Copy Command und
Kill "process" (PID) öffnen, das fragt, ob Terminate (SIGTERM) oder Force Kill (SIGKILL) ausgeführt werden soll
- Delete: Die aktuell ausgewählte Zeile beenden (gleicher Bestätigungsdialog)
- Ctrl+C: Den Zelleninhalt kopieren
- Refresh-Button in der Kopfleiste: Sofort aktualisieren (die Liste wird auch alle 3 Sekunden aktualisiert)
Terminal-Oberfläche (TUI)

Starten Sie die Terminal-Oberfläche:
cargo run --bin nmt
Die TUI bietet dieselben Überwachungsfunktionen in einer interaktiven Terminal-Oberfläche:
Tastensteuerung:
q - Anwendung beenden
r - Hostnamen-Auflösung umschalten
R - Verbindungen manuell aktualisieren
a - Automatische Aktualisierung umschalten (2-Sekunden-Intervalle)
↑/↓ - Durch Verbindungen navigieren
←/→ - Tabelle horizontal scrollen
k / Rechtsklick - Kill-Menü für eine Zeile öffnen (Terminate / Force Kill / Cancel)
1-8 - Nach Spalten sortieren (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path)
Maus: Linksklick wählt eine Zeile aus, Rechtsklick wählt sie aus und öffnet das Kill-Menü.
Funktionen:
- Echtzeit-Verbindungsüberwachung mit automatischer Aktualisierung
- Sortierbare Spalten mit visuellen Indikatoren
- Horizontales Scrollen für breite Tabellen
- Intelligente Spaltengrößenanpassung - die letzte Spalte erhält die volle verbleibende Breite
- Farbcodierte Protokolle (TCP/TCP6 in Grün, UDP/UDP6 in Gelb)
- Hervorhebung aktiver Verbindungen
- Prozess- und PID-Informationen
- Live-I/O-Ratenanzeige
- Gleiche Spaltenreihenfolge wie die GTK4-Version für Konsistenz
Adressauflösung
Gängige Adressen werden zur besseren Lesbarkeit vereinfacht:
0.0.0.0:* oder *:* → ANY
127.0.0.1:* oder [::1]:* → LOCALHOST
224.0.0.251:* → MDNS
Funktionsweise
eBPF-Backend (ereignisgesteuert)
Die App verwendet Kernel-Level-kprobes (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) anstelle von Polling auf /proc/net. Dies bietet:
- Ereignisgesteuert: Sub-Millisekunden-Ereignisbereitstellung, kein Polling-Overhead (~1-3% CPU)
- Direkte PID: Erfasst am Probe-Punkt über
bpf_get_current_pid_tgid(), kein Inode-Scanning
- Kurzlebige Verbindungen: Werden zwischen Poll-Intervallen nie verpasst
eBPF-Modus
Das eBPF-Backend bietet ereignisgesteuerte Verbindungsüberwachung mit geringerem Overhead und Echtzeit-
Ereignissen im Vergleich zum standardmäßigen /proc/net-Polling-Ansatz. Es kann kurzlebige Verbindungen erfassen,
die beim Polling möglicherweise verpasst werden.