
Netzwerküberwachung pro Prozess für Ihr Terminal mit Deep Packet Inspection. Plattformübergreifend, sandboxed.
Prozessbezogenes Netzwerk-Monitoring für dein Terminal: Live-TCP-, UDP- und QUIC-Verbindungen mit Deep Packet Inspection, standardmäßig in einer Sandbox.
Echtzeit-Einblick in jede Verbindung, die dein Rechner aufbaut, wem sie gehört und welches Protokoll sie spricht. Kein tcpdump, kein X11-Forwarding und kein Root-Piping.
netstat / ss können keinen Live-Status anzeigen.--pcapng-export schreibt einen Wireshark-bereiten Mitschnitt mit Prozess, PID, Richtung, DPI/SNI und GeoIP als Kommentare pro Paket. Öffne ihn in Wireshark und jedes Paket nennt bereits seinen Eigentümerprozess – ganz ohne Nachbearbeitung. Klassisches --pcap-export mit einer JSONL-Begleitdatei zur Offline-Korrelation ist ebenfalls verfügbar.t lassen sich historische (geschlossene) Verbindungen für Forensik-Zwecke sichtbar halten.port:, , , , , , sowie Regex über .RustNet schließt die Lücke zwischen einfachen Verbindungswerkzeugen (netstat, ss) und Paketanalysatoren (Wireshark, tcpdump):
RustNet ergänzt Paketmitschnitt-Werkzeuge. Nutze RustNet, um zu sehen, was Verbindungen aufbaut. Für die direkte Wireshark-Analyse schreibt --pcapng-export Live-Paketkommentare mit PID-/Prozesskontext nach dem Best-Effort-Prinzip. Für die Korrelation nach dem Mitschneiden verwende --pcap-export zusammen mit der JSONL-Begleitdatei und optional scripts/pcap_enrich.py. Details findest du unter PCAP-Export und Vergleich mit ähnlichen Werkzeugen.
Basiert auf ratatui, libpcap, eBPF (libbpf-rs), DashMap, crossbeam, ring, MaxMind GeoLite2 und Landlock. Die vollständige Aufschlüsselung der Abhängigkeiten findest du in ARCHITECTURE.md.
RustNet verwendet unter Linux standardmäßig eBPF-Programme im Kernel für eine bessere Leistung und Prozessidentifikation mit geringerem Overhead.
Prozessnamen:
comm-Namen des Prozessgruppen-Leiters auf (ein auf 16 Zeichen begrenztes Kernel-Feld) statt des Namens des aktiven Threads. Dadurch zeigen mehrthreadige Anwendungen den Hauptprozessnamen statt Threadnamen wie „Socket Thread“./proc/<tgid>/comm, stellt gekürzte comm-Namen aus dem Dateinamen der ausführbaren Datei wieder her (z. B. wird aus „chromium-browse“ „chromium-browser“) und löst den vollständigen Pfad der ausführbaren Datei auf, der in der Detailansicht angezeigt wird.Fallback-Verhalten:
Um eBPF zu deaktivieren und den reinen procfs-Modus zu verwenden, erstelle mit:
cargo build --release --no-default-features
Technische Informationen findest du in ARCHITECTURE.md.
RustNet kombiniert Verkehrsaufzeichnung auf Prozessebene mit Echtzeit-Statistiken der Netzwerkschnittstellen:
3): Sortiert Prozesse nach Egress (TX) oder Ingress (RX), einschließlich aufbewahrtem und rollierendem Datenverkehr, Raten, Anteilen, Verbindungen und Zieleni im Tab „Aktivität“): Zeigt die ursprünglichen umfassenden Metriken für jede SchnittstelleAusführliche Dokumentation zur Interpretation der Schnittstellenstatistiken und zum plattformspezifischen Verhalten findest du in USAGE.md.
Verfügbare Metriken:
Die Statistiken werden alle 2 Sekunden in einem Hintergrund-Thread mit minimaler Leistungsbeeinträchtigung gesammelt.
Homebrew (macOS / Linux):
brew install rustnet
Ubuntu (22.04 LTS+) / Linux Mint 21+ / Pop!_OS 22.04+:
sudo add-apt-repository ppa:domcyrus/rustnet
# on Pop!_OS: sudo apt-manage add ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet
Fedora (42+):
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet
openSUSE Tumbleweed:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/domcyrus:/rustnet/openSUSE_Tumbleweed/home:domcyrus:rustnet.repo
sudo zypper refresh
sudo zypper install rustnet
Arch Linux:
sudo pacman -S rustnet
Nix / NixOS:
nix-shell -p rustnet
# Then inside the shell: sudo rustnet
Von crates.io:
cargo install rustnet-monitor
Windows (Chocolatey):
# Run in Administrator PowerShell
# Requires Npcap (https://npcap.com) installed with "WinPcap API-compatible Mode" enabled
choco install rustnet
Andere Plattformen:
Paketmitschnitt erfordert erhöhte Rechte:
# Quick start (all platforms)
sudo rustnet
# Linux: Grant capabilities to run without sudo (recommended)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet
Häufige Optionen:
rustnet -i eth0 # Specify network interface
rustnet --show-localhost # Show localhost connections
rustnet --no-resolve-dns # Disable reverse DNS lookups (enabled by default)
rustnet -r 500 # Set refresh interval (ms)
rustnet --theme tokyo-night # Theme: muted (default), vivid, catppuccin-mocha, tokyo-night, gruvbox, nord
rustnet --pcapng-export capture.pcapng # Annotated PCAPNG for Wireshark
Das Theme und individuelle Farbüberschreibungen können auch in ~/.config/rustnet/config.toml festgelegt werden; --theme hat Vorrang. Das Schema findest du in USAGE.md.
Detaillierte Berechtigungseinrichtung findest du in INSTALL.md und alle Optionen in USAGE.md.
Falls du Capabilities gesetzt hast, die TUI aber weiterhin
eBPF unavailableanzeigt, siehe eBPF Unavailable Despite Capabilities Being Set im Abschnitt zur Fehlerbehebung.
Detaillierte Tastatursteuerungen und Navigationstipps findest du in USAGE.md.
Schnelle Filterbeispiele:
/google # Search for "google" anywhere
/port:443 # Filter by port
/process:firefox # Filter by process
/state:established # Filter by connection state
/dport:443 sni:github.com # Combine filters
Sortieren:
s, um die sortierbaren Spalten durchzuschalten (Prozess, Adressen, Dienst, Anwendung, Status, Bandbreite)S (Umschalt+s), um die Sortierrichtung umzuschaltens, bis „Bandwidth Total ↓“ erscheint (sortiert nach kombinierter Upload-/Download-Geschwindigkeit)Die vollständige Filtersyntax und den Sortierleitfaden findest du in USAGE.md.
Stichwortfilter:
port:44 – Ports, die „44“ enthalten (443, 8080, 4433)sport:80 – Quellports, die „80“ enthaltendport:443 – Zielports, die „443“ enthaltensrc:192.168 – Quell-IPs, die „192.168“ enthaltendst:github.com – Ziele, die „github.com“ enthaltenprocess:ssh – Prozessnamen, die „ssh“ enthaltensni:api – SNI-Hostnamen, die „api“ enthaltenapp:openssh – SSH-Verbindungen, die OpenSSH verwendenstate:established – Nach Protokollstatus filternproto:tcp – Nach Protokolltyp filternStatusfilter:
state:syn_recv – Halboffene Verbindungen (SYN-Flood-Erkennung)RustNet verwendet intelligente Timeouts und visuelle Warnungen, bevor Verbindungen entfernt werden:
Visuelle Veraltungsanzeigen:
Protokollbewusste Timeouts:
Initial/Handshaking: 60 SekundenBeispiel: Eine HTTP-Verbindung wird nach 7,5 Minuten gelb, nach 9 Minuten rot und nach 10 Minuten entfernt.
Vollständige Details zu den Timeouts findest du in USAGE.md.
Beiträge sind willkommen! Richtlinien für die Mitarbeit findest du in CONTRIBUTING.md.
Eine Liste der Personen, die zu diesem Projekt beigetragen haben, findest du in CONTRIBUTORS.md.
Dieses Projekt ist unter der Apache License, Version 2.0 lizenziert – siehe die Datei LICENSE für Details.
tshark/wireshark/tcpdump, sniffnet, netstat, ss, iftop und bandwhichEinige Abschnitte wurden zur besseren Organisation in eigene Dateien verschoben:
src:dst:sni:process:state:proto:/(?i)pattern/kubernetes-Feature): Verbindungen werden ihrem Pod, Namespace und Container zugeordnet und im Detailbereich, in JSON-/PCAPNG-Exporten sowie in den Filtern pod:, ns:, container: angezeigt. Im offiziellen Docker-Image aktiviert; in einem Cluster kannst du das kubectl-rustnet-Plugin verwenden, um es als ephemeren Debug-Pod auszuführen. Siehe USAGE.md.| Übersicht Verbindungstabelle mit Live-Statistiken und Sparklines ![]() | Details Pro-Verbindungs-SNI, Cipher, GeoIP, DPI ![]() |
| Diagramm Verkehrsdiagramm, App-Verteilung, Top-Prozesse ![]() | Aktivität Prozess-Egress/Ingress, 60-Sekunden-Abdeckung, Zuordnung und entfernte Peers ![]() |
| Key | Aktion |
|---|
q | Beenden (zweimal drücken zum Bestätigen) |
Ctrl+C | Sofort beenden |
x | Alle Verbindungen löschen (zweimal drücken zum Bestätigen) |
Tab oder ] | Nächster Tab |
Shift+Tab oder [ | Vorheriger Tab |
1–5 | Zu Übersicht / Details / Aktivität / Diagramm / Hilfe springen |
↑/k ↓/j | Nach oben/unten navigieren |
g G | Zur ersten/letzten Verbindung springen |
Enter | Verbindungsdetails anzeigen |
Esc | Zurückgehen oder Filter löschen |
c | Entfernte Adresse kopieren |
p | Dienstnamen/Ports umschalten |
d | Hostnamen/IPs in der Übersicht oder Egress/Ingress in der Aktivität umschalten |
s S | Sortierspalten durchschalten / Richtung umschalten |
a | Prozessgruppierung umschalten |
Space | Prozessgruppe erweitern/einklappen |
←/→ oder h/l | Gruppe einklappen/erweitern |
PageUp/PageDown oder Ctrl+B/F | Seitennavigation |
t | Historische (geschlossene) Verbindungen umschalten |
i | Systeminfo in der Übersicht oder Schnittstellendetails in der Aktivität umschalten |
r | Ansicht zurücksetzen (Gruppierung, Sortierung, Filter) |
/ | Filtermodus öffnen |
h | Hilfe umschalten |
state:established – Nur bestehende Verbindungenstate:quic_connected – Aktive QUIC-Verbindungenstate:dns_query – DNS-AbfrageverbindungenKombinierte Beispiele:
sport:80 process:nginx – Nginx-Verbindungen von Port 80dport:443 sni:google.com – HTTPS zu Googleprocess:firefox state:quic_connected – Firefox-QUIC-Verbindungendport:22 app:openssh state:established – Bestehende OpenSSH-Verbindungen