
network-monitor v0.7.5
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.
Network Monitor

Ein Tool zur Echtzeit-Überwachung von 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-/Downloadraten für jede Verbindung an
- Prozessidentifikation: Zeigt das Programm und die PID an, die mit jeder Verbindung verknüpft sind
- Moderne GTK4-Benutzeroberfläche: Saubere, reaktionsschnelle grafische Oberfläche mit Libadwaita-Styling
- Terminal-Benutzeroberflä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: Korrekte Unterstützung der WM class für das Anheften im Dock und die Desktop-Integration
- Duale Installation: Unterstützt sowohl benutzerlokale als auch systemweite Installation
- Robuste Fehlerbehandlung: Umfassende Fehlerwiederherstellung mit klaren Einrichtungsanweisungen
- Leistungsoptimiert: Prozess- und Layout-Caching für verbesserte Reaktionsfähigkeit
Anforderungen
- Rust 1.70+ (Edition 2021)
- GTK4-Entwicklungsbibliotheken
- Libadwaita-Entwicklungsbibliotheken
- Linux-System mit
/proc-Dateisystem - Linux 5.8+ (für granulare eBPF-Capabilities)
- Nightly-Rust und
bpf-linker(für die 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 (sudo erforderlich):
sudo ./scripts/install.sh
Das Installationsskript wird:
- GTK4- und TUI-Binärdateien erstellen (Debug für lokal, Release für systemweit)
- Binärdateien in
~/.local/bin/(lokal) oder/usr/local/bin/(systemweit) installieren - Desktop-Datei mit korrekter WM class für das Anheften im GNOME-Dock installieren
- Symbole in die entsprechenden Icon-Verzeichnisse installieren
- Icon-Cache und Desktop-Datenbank aktualisieren
- Sicherstellen, dass die Anwendung im 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
- Die 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
Entfernen der lokalen Installation:
./scripts/uninstall.sh
Systemweite Entfernung (sudo erforderlich):
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
Die Netzwerkmonitor-Anwendung starten:
cargo run
Die Anwendung öffnet ein GTK4-Fenster, das Folgendes anzeigt:
- Prozess(ID): Prozessname und PID mit genauer Socket-zu-Prozess-Zuordnung
- Protokoll: TCP/UDP-Protokoll
- Quelle: Lokaler Endpunkt (in ein lesbares Format aufgelöst)
- Ziel: Remote-Endpunkt (in ein lesbares Format aufgelöst)
- Status: Verbindungszustand (ESTABLISHED, LISTEN usw.)
- TX: Uploadrate, berechnet aus den Prozess-I/O-Statistiken
- RX: Downloadrate, berechnet aus den Prozess-I/O-Statistiken
- Pfad: Vollständiger Befehls- und Argumentpfad aus
/proc/[pid]/cmdline
Terminal-Oberfläche (TUI)

Die Terminal-Oberfläche starten:
cargo run --bin nmt
Die TUI bietet dieselben Überwachungsfunktionen in einer interaktiven Terminal-Oberfläche:
Wichtige Tasten:
q- Anwendung beendenr- Verbindungen manuell aktualisierena- Auto-Refresh umschalten (2-Sekunden-Intervalle)↑/↓- Durch Verbindungen navigieren←/→- Tabelle horizontal scrollen1-8- Nach Spalten sortieren (Prozess(ID), Protokoll, Quelle, Ziel, Status, TX, RX, Pfad)
Funktionen:
- Echtzeit-Verbindungsüberwachung mit Auto-Refresh
- Sortierbare Spalten mit visuellen Indikatoren
- Horizontales Scrollen für breite Tabellen
- Intelligente Spaltengrößen - 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
- Dieselbe Spaltenreihenfolge wie in der GTK4-Version für Konsistenz
Adressauflösung
Gängige Adressen werden zur besseren Lesbarkeit vereinfacht:
0.0.0.0:*oder*:*→ANY127.0.0.1:*oder[::1]:*→LOCALHOST224.0.0.251:*→MDNS
So funktioniert es
eBPF-Backend (ereignisgesteuert)
Die App verwendet Kprobes auf Kernel-Ebene (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) anstelle von Polling auf /proc/net. Dies bietet:
- Ereignisgesteuert: Ereignisbereitstellung in Sub-Millisekunden, kein Polling-Overhead (~1-3 % CPU)
- Direkte PID: Wird am Probe-Punkt über
bpf_get_current_pid_tgid()erfasst, kein Inode-Scanning - Kurzlebige Verbindungen: Werden zwischen Poll-Intervallen nie verpasst
eBPF-Modus
Das eBPF-Backend bietet eine ereignisgesteuerte Verbindungsüberwachung mit geringerem Overhead und Echtzeit-
Ereignissen, verglichen mit dem Standard-Polling-Ansatz über /proc/net. Es kann kurzlebige Verbindungen
erfassen, die Polling möglicherweise übersieht.
Voraussetzungen:
rustup toolchain install nightly
cargo install bpf-linker
Erstellen und ausführen:
cargo build
Als normaler Benutzer ausführen (Kernel 5.8+ erforderlich):
Erteilen Sie der Binärdatei einmalig die erforderlichen Linux-Capabilities:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor
./target/debug/network-monitor
Oder für die TUI-Version:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt
./target/debug/nmt
Für Release-Builds passen Sie den Pfad entsprechend an:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
Die App beendet sich mit einer Einrichtungsmeldung, wenn eBPF nicht verfügbar ist (fehlende Capabilities oder nicht unterstützter Kernel).
Architektur
- GTK4: Modernes plattformübergreifendes GUI-Framework
- Libadwaita: GNOME-ähnliche UI-Komponenten
- Tokio: Asynchrone Laufzeit für parallele Operationen
- Aya + eBPF: Verbindungsverfolgung auf Kernel-Ebene mit Kprobes für Echtzeit-Ereignisse
- Direkte PID: Prozessidentifikation über
bpf_get_current_pid_tgid()am Probe-Punkt - Systemaufrufe: Direktes Lesen von
/proc/[pid]/iofür I/O-Statistiken - Fehlerbehandlung: Umfassende Fehlertypen mit geordneter Wiederherstellung mithilfe von
thiserror - Leistungs-Caching: UI-Layout-Caching für optimale Leistung
Linux-Pakete
Spenden
Wenn Sie dieses Projekt nützlich finden, erwägen Sie bitte eine Spende, um seine Entwicklung zu unterstützen.
- Monero:
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv - Bitcoin:
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
Lizenz
Dieses Projekt ist Open Source. Einzelheiten finden Sie in der LICENSE-Datei.