Zurück zu den Updates
New releaseAug 21, 2026

rustnet v1.6.0

Netzwerküberwachung pro Prozess für Ihr Terminal mit Deep Packet Inspection. Plattformübergreifend, sandboxed.

Teilen

RustNet

Prozessbezogenes Netzwerk-Monitoring für dein Terminal: Live-TCP-, UDP- und QUIC-Verbindungen mit Deep Packet Inspection, standardmäßig in einer Sandbox.

Built With Ratatui Build Status Crates.io GitHub Stars License GitHub release Docker Image

English | 简体中文 | 日本語

RustNet-Demo

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.

Funktionen

  • Prozesszuordnung: Jede TCP-, UDP- und QUIC-Verbindung wird ihrem Eigentümerprozess zugeordnet – per eBPF unter Linux, PKTAP unter macOS, ETW mit automatischem IP-Helper-Fallback unter Windows und nativen APIs unter FreeBSD. Die Details umfassen PID, ausführbare Datei, Benutzer-/Gruppennamen, Übereinstimmungsgrad und eine begrenzte Elternprozess-Kette auf jeder Plattform. Wireshark und tcpdump können das nicht; netstat / ss können keinen Live-Status anzeigen.
  • Deep Packet Inspection: Erkennt HTTP, HTTPS/TLS mit SNI, DNS, SSH, FTP, QUIC, MQTT, BitTorrent, STUN, NTP, mDNS, LLMNR, DHCP, SNMP, SSDP und NetBIOS – ohne externe Dissectors.
  • Annotierter PCAPNG-Export: --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.
  • Sicherheits-Sandboxing: Landlock (Linux 5.13+), Seatbelt (macOS), Token-Privilegienabsenkung + Job-Object-Blockierung von Kindprozessen (Windows). Senkt die Privilegien sofort nach der Initialisierung von libpcap. Siehe SECURITY.md.
  • Netzwerkanalysen: Echtzeit-Umlaufzeiten für TCP, QUIC-Handshakes, DNS-Antworten und ICMP-Echo sowie Erkennung von TCP-Wiederholungen, Paketen in falscher Reihenfolge und Fast Retransmit.
  • Intelligenter Verbindungslebenszyklus: Protokollbewusste Timeouts mit Weiß-→-Gelb-→-Rot-Anzeigen für veraltete Verbindungen. Mit t lassen sich historische (geschlossene) Verbindungen für Forensik-Zwecke sichtbar halten.
  • Filtern im Vim/fzf-Stil: port:, src:, dst:, sni:, process:, state:, proto: sowie Regex über /(?i)pattern/.
  • GeoIP-Anreicherung: Länderabfragen über lokale MaxMind-GeoLite2-Daten. Keine Netzwerkaufrufe.
  • LAN-Geräteidentifikation: MAC-Adresse und Hersteller (aus der eingebetteten IEEE-OUI-Datenbank) für direkt erreichbare Peers und das Gateway, passiv aus ARP-Datenverkehr gelernt und im Detailbereich angezeigt.
  • Kubernetes-Zuordnung (optionales 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.
  • Plattformübergreifend: Linux, macOS, Windows, FreeBSD.

Warum RustNet?

RustNet schließt die Lücke zwischen einfachen Verbindungswerkzeugen (netstat, ss) und Paketanalysatoren (Wireshark, tcpdump):

  • Prozesszuordnung: Sieh, welche Anwendung jede Verbindung besitzt. Wireshark kann das nicht bieten, weil es nur Pakete sieht, keine Sockets.
  • Verbindungszentrierte Ansicht: Verfolge Zustände, Bandbreite und Protokolle pro Verbindung in Echtzeit
  • SSH-freundlich: Die TUI funktioniert über SSH, sodass du schnell sehen kannst, was auf einem entfernten Server passiert – ohne X11-Weiterleitung oder Datenverkehrsmitschnitt.

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.

eBPF-erweiterte Prozessidentifikation (Linux-Standard)

RustNet verwendet unter Linux standardmäßig eBPF-Programme im Kernel für eine bessere Leistung und Prozessidentifikation mit geringerem Overhead.

Prozessnamen:

  • eBPF zeichnet die TGID und den 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“.
  • RustNet ermittelt anschließend den aktuellen Namen erneut über /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.
  • Kurzlebige Prozesse, die beendet werden, bevor diese Anreicherung greift, behalten den per eBPF erfassten 16-Zeichen-Namen.

Fallback-Verhalten:

  • Wenn eBPF nicht geladen werden kann oder die Berechtigungen nicht ausreichen, fällt RustNet automatisch auf die standardmäßige Prozessidentifikation über procfs zurück.
  • Der Standardmodus löst Namen auf demselben Weg per procfs-Scan auf, allerdings mit höherem CPU-Aufwand.
  • eBPF ist standardmäßig aktiviert; es sind keine besonderen Build-Flags nötig.

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.

Prozessaktivität und Schnittstellenüberwachung

RustNet kombiniert Verkehrsaufzeichnung auf Prozessebene mit Echtzeit-Statistiken der Netzwerkschnittstellen:

  • Tab „Übersicht“: Zeigt aktive Schnittstellen mit aktuellen Raten, Fehlern und Verlusten
  • Tab „Aktivität“ (Taste 3): Sortiert Prozesse nach Egress (TX) oder Ingress (RX), einschließlich aufbewahrtem und rollierendem Datenverkehr, Raten, Anteilen, Verbindungen und Zielen
  • Security-Workflow: Sortiere nach Egress, identifiziere einen unerwarteten Uploader und prüfe dann seinen wichtigsten entfernten Peer sowie den aufbewahrten Datenverkehr, selbst nachdem die Verbindung geschlossen wurde.
  • Schnittstellendetails (Taste i im Tab „Aktivität“): Zeigt die ursprünglichen umfassenden Metriken für jede Schnittstelle
  • Plattformübergreifend: Linux (sysfs), macOS/FreeBSD (getifaddrs), Windows (GetIfTable2-API)
  • Intelligentes Filtern: Windows schließt virtuelle/Filter-Adapter automatisch aus

Ausführliche Dokumentation zur Interpretation der Schnittstellenstatistiken und zum plattformspezifischen Verhalten findest du in USAGE.md.

Verfügbare Metriken:

  • Gesamte Bytes und Pakete (RX/TX)
  • Fehlerzähler (Empfang und Senden)
  • Paketverluste (Warteschlangenüberläufe)
  • Kollisionen (veraltet, in modernen Netzwerken selten genutzt)

Die Statistiken werden alle 2 Sekunden in einem Hintergrund-Thread mit minimaler Leistungsbeeinträchtigung gesammelt.

Screenshots

Ü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

Schnellstart

Installation

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:

  • FreeBSD: Lade von den rustnet-bsd-Releases herunter
  • Docker, Quellcode-Builds, andere Linux-Distributionen: Detaillierte Anweisungen findest du in INSTALL.md

RustNet ausführen

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 unavailable anzeigt, siehe eBPF Unavailable Despite Capabilities Being Set im Abschnitt zur Fehlerbehebung.

Tastatursteuerung

KeyAktion
qBeenden (zweimal drücken zum Bestätigen)
Ctrl+CSofort beenden
xAlle Verbindungen löschen (zweimal drücken zum Bestätigen)
Tab oder ]Nächster Tab
Shift+Tab oder [Vorheriger Tab
15Zu Übersicht / Details / Aktivität / Diagramm / Hilfe springen
↑/k ↓/jNach oben/unten navigieren
g GZur ersten/letzten Verbindung springen
EnterVerbindungsdetails anzeigen
EscZurückgehen oder Filter löschen
cEntfernte Adresse kopieren
pDienstnamen/Ports umschalten
dHostnamen/IPs in der Übersicht oder Egress/Ingress in der Aktivität umschalten
s SSortierspalten durchschalten / Richtung umschalten
aProzessgruppierung umschalten
SpaceProzessgruppe erweitern/einklappen
←/→ oder h/lGruppe einklappen/erweitern
PageUp/PageDown oder Ctrl+B/FSeitennavigation
tHistorische (geschlossene) Verbindungen umschalten
iSysteminfo in der Übersicht oder Schnittstellendetails in der Aktivität umschalten
rAnsicht zurücksetzen (Gruppierung, Sortierung, Filter)
/Filtermodus öffnen
hHilfe umschalten

Detaillierte Tastatursteuerungen und Navigationstipps findest du in USAGE.md.

Filtern & Sortieren

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:

  • Drücke s, um die sortierbaren Spalten durchzuschalten (Prozess, Adressen, Dienst, Anwendung, Status, Bandbreite)
  • Drücke S (Umschalt+s), um die Sortierrichtung umzuschalten
  • Bandbreitenfresser finden: Drücke s, bis „Bandwidth Total ↓“ erscheint (sortiert nach kombinierter Upload-/Download-Geschwindigkeit)

Die vollständige Filtersyntax und den Sortierleitfaden findest du in USAGE.md.

Erweiterte Filterbeispiele

Stichwortfilter:

  • port:44 – Ports, die „44“ enthalten (443, 8080, 4433)
  • sport:80 – Quellports, die „80“ enthalten
  • dport:443 – Zielports, die „443“ enthalten
  • src:192.168 – Quell-IPs, die „192.168“ enthalten
  • dst:github.com – Ziele, die „github.com“ enthalten
  • process:ssh – Prozessnamen, die „ssh“ enthalten
  • sni:api – SNI-Hostnamen, die „api“ enthalten
  • app:openssh – SSH-Verbindungen, die OpenSSH verwenden
  • state:established – Nach Protokollstatus filtern
  • proto:tcp – Nach Protokolltyp filtern

Statusfilter:

  • state:syn_recv – Halboffene Verbindungen (SYN-Flood-Erkennung)
  • state:established – Nur bestehende Verbindungen
  • state:quic_connected – Aktive QUIC-Verbindungen
  • state:dns_query – DNS-Abfrageverbindungen

Kombinierte Beispiele:

  • sport:80 process:nginx – Nginx-Verbindungen von Port 80
  • dport:443 sni:google.com – HTTPS zu Google
  • process:firefox state:quic_connected – Firefox-QUIC-Verbindungen
  • dport:22 app:openssh state:established – Bestehende OpenSSH-Verbindungen
Verbindungslebenszyklus & visuelle Indikatoren

RustNet verwendet intelligente Timeouts und visuelle Warnungen, bevor Verbindungen entfernt werden:

Visuelle Veraltungsanzeigen:

  • Weiß: Aktiv (< 75 % des Timeouts)
  • Gelb: Veraltet (75–90 % des Timeouts)
  • Rot: Kritisch (> 90 % des Timeouts)

Protokollbewusste Timeouts:

  • HTTP/HTTPS: 10 Minuten (unterstützt Keep-Alive)
  • SSH: 30 Minuten (lange Sitzungen)
  • Allgemein etabliertes TCP: 5 Minuten
  • QUIC verbunden: 3 Minuten (oder der Idle-Timeout des Transport-Parameters vom Peer, falls vorhanden); Initial/Handshaking: 60 Sekunden
  • DNS: 30 Sekunden
  • TCP CLOSED: 15 Sekunden Archivierungsfrist

Beispiel: 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.

Dokumentation

  • INSTALL.md – Detaillierte Installationsanweisungen für alle Plattformen, Berechtigungseinrichtung und Fehlerbehebung
  • USAGE.md – Vollständiger Benutzerleitfaden einschließlich Befehlszeilenoptionen, Filtern, Sortieren und Protokollierung
  • SECURITY.md – Sicherheitsfunktionen einschließlich Landlock-Sandboxing und Berechtigungsverwaltung
  • ARCHITECTURE.md – Technische Architektur, Plattformimplementierungen und Leistungsdetails
  • CONTRIBUTING.md – Beitrags-Workflow, Qualitätsanforderungen und Projektrichtlinien
  • PROFILING.md – Leitfaden zur Leistungsanalyse mit Flamegraph-Einrichtung und Optimierungstipps
  • ROADMAP.md – Geplante Funktionen und zukünftige Verbesserungen
  • RELEASE.md – Release-Prozess für Maintainer

Mitwirken

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.

Lizenz

Dieses Projekt ist unter der Apache License, Version 2.0 lizenziert – siehe die Datei LICENSE für Details.

Danksagungen

  • Erstellt mit ratatui für die Terminal-Benutzeroberfläche
  • Paketmitschnitt unterstützt durch libpcap
  • Inspiriert von Werkzeugen wie tshark/wireshark/tcpdump, sniffnet, netstat, ss, iftop und bandwhich
  • Ein Teil des Codes ist vibe-coded (OMG) / mögen die LLM-Götter mit dir sein

Dokumentation verschoben

Einige Abschnitte wurden zur besseren Organisation in eigene Dateien verschoben:

Kategorien