
Ein Echtzeit-Tool zur Überwachung von Netzwerkverbindungen, entwickelt mit Rust und GTK4, das aktive Verbindungen mit Live-I/O-Statistiken in einer modernen grafischen Oberfläche anzeigt.
# 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. [](https://github.com/grigio/network-monitor/actions/workflows/rust.yml) [](https://deps.rs/repo/github/grigio/network-monitor) ## 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: ```bash sudo apt update sudo apt install libgtk-4-dev libadwaita-1-dev ``` ### Installation unter Fedora: ```bash sudo dnf install gtk4-devel libadwaita-devel ``` ## Installation ### Methode 1: Aus dem Quellcode mit Desktop-Integration installieren 1. Repository klonen: ```bash git clone <repository-url> cd network-monitor ``` 2. Lokal installieren (kein sudo erforderlich): ```bash ./scripts/install.sh ``` 3. Oder systemweit installieren (erfordert sudo): ```bash 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 1. Repository klonen: ```bash git clone <repository-url> cd network-monitor ``` 2. Erstellen und ausführen: ```bash cargo run ``` Oder im Release-Modus erstellen: ```bash cargo build --release ./target/release/network-monitor ``` ### Methode 3: TUI-Version erstellen und ausführen 1. Repository klonen: ```bash git clone <repository-url> cd network-monitor ``` 2. TUI erstellen und ausführen: ```bash cargo build --bin nmt ./target/debug/nmt ``` Oder im Release-Modus erstellen: ```bash cargo build --release --bin nmt ./target/release/nmt ``` ## Deinstallation ### Installierte Version entfernen Lokale Installation entfernen: ```bash ./scripts/uninstall.sh ``` Systemweite Entfernung (erfordert sudo): ```bash 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: ```bash 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: ```bash 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. **Voraussetzungen:** ```bash rustup toolchain install nightly cargo install bpf-linker ``` **Erstellen und ausführen:** ```bash cargo build ``` **Als normaler Benutzer ausführen** (Kernel 5.8+ erforderlich): Gewähren Sie der Binärdatei einmalig die erforderlichen Linux-Fähigkeiten: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor ./target/debug/network-monitor ``` Oder für die TUI-Version: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt ./target/debug/nmt ``` Passen Sie für Release-Builds den Pfad entsprechend an: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor ``` Die App wird mit einer Einrichtungsnachricht beendet, wenn eBPF nicht verfügbar ist (fehlende Fähigkeiten oder nicht unterstützter Kernel). ## Architektur - **GTK4**: Modernes plattformübergreifendes GUI-Framework - **Libadwaita**: UI-Komponenten im GNOME-Stil - **Tokio**: Asynchrone Laufzeit für gleichzeitige Operationen - **Aya + eBPF**: Kernel-Level-Verbindungsverfolgung mit kprobes für Echtzeit-Ereignisse - **Direkte PID**: Prozessidentifikation über `bpf_get_current_pid_tgid()` am Probe-Punkt - **Systemaufrufe**: Direktes Lesen von `/proc/[pid]/io` für I/O-Statistiken - **Fehlerbehandlung**: Umfassende Fehlertypen mit eleganter Wiederherstellung unter Verwendung von `thiserror` - **Leistungs-Caching**: UI-Layout-Caching für optimale Leistung ## Linux-Pakete [](https://repology.org/project/network-monitor/versions) ## Spenden Wenn Sie dieses Projekt hilfreich finden, ziehen Sie bitte eine Spende in Betracht, um seine Entwicklung zu unterstützen. - **Monero**: `88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv` - **Bitcoin**: `bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025` ## Lizenz Dieses Projekt ist Open Source. Siehe die LICENSE-Datei für Details.