Torna agli aggiornamenti
New releaseAug 21, 2026

rustnet v1.6.0

Monitoraggio di rete per processo per il tuo terminale con ispezione profonda dei pacchetti. Multipiattaforma, in sandbox.

Condividi

RustNet

Monitoraggio di rete per processo per il tuo terminale: connessioni TCP, UDP e QUIC in tempo reale con ispezione approfondita dei pacchetti, in sandbox per impostazione predefinita.

Costruito con Ratatui Stato della build Crates.io Stelle GitHub Licenza Release GitHub Immagine Docker

English | 简体中文 | 日本語

Demo di RustNet

Visibilità in tempo reale su ogni connessione creata dalla tua macchina, su chi la possiede e su quale protocollo sta parlando. Niente tcpdump, forwarding X11 o pipe da root.

Funzionalità

  • Attribuzione per processo: Ogni connessione TCP, UDP e QUIC è associata al processo proprietario, tramite eBPF su Linux, PKTAP su macOS, ETW con fallback automatico a IP Helper su Windows e API native su FreeBSD. I dettagli includono PID, eseguibile, nomi utente/gruppo, livello di confidenza della corrispondenza e una catena limitata dei processi genitori su ogni piattaforma. Wireshark e tcpdump non possono farlo; netstat / ss non mostrano lo stato in tempo reale.
  • Ispezione approfondita dei pacchetti: Identifica HTTP, HTTPS/TLS con SNI, DNS, SSH, FTP, QUIC, MQTT, BitTorrent, STUN, NTP, mDNS, LLMNR, DHCP, SNMP, SSDP e NetBIOS, senza dissector esterni.
  • Esportazione PCAPNG annotata: --pcapng-export scrive una cattura pronta per Wireshark con processo, PID, direzione, DPI/SNI e GeoIP incorporati come commenti per ogni pacchetto. Aprila in Wireshark e ogni pacchetto indicherà già il processo proprietario, senza post-elaborazione. È disponibile anche la classica --pcap-export con un sidecar JSONL per la correlazione offline.
  • Sandboxing di sicurezza: Landlock (Linux 5.13+), Seatbelt (macOS), riduzione dei privilegi tramite token + blocco dei processi figlio tramite job object (Windows). Riduce i privilegi immediatamente dopo l'inizializzazione di libpcap. Vedi SECURITY.md.
  • Analisi di rete: Tempi di round-trip in tempo reale per TCP, handshake QUIC, risposte DNS ed echo ICMP, oltre al rilevamento di ritrasmissioni TCP, pacchetti fuori ordine e fast retransmit.
  • Ciclo di vita intelligente delle connessioni: Timeout consapevoli del protocollo con indicatori di inattività bianco → giallo → rosso. Premi t per mantenere visibili le connessioni storiche (chiuse) per analisi forensi.
  • Filtri in stile Vim/fzf: port:, src:, dst:, sni:, process:, state:, proto:, più regex tramite /(?i)pattern/.
  • Arricchimento GeoIP: Ricerca del paese tramite MaxMind GeoLite2 locale. Nessuna chiamata di rete.
  • Identificazione dei dispositivi LAN: Indirizzo MAC e vendor (dal database IEEE OUI integrato) per i peer sulla rete locale e il gateway, appresi passivamente dal traffico ARP e mostrati nel pannello dei dettagli.
  • Attribuzione Kubernetes (funzionalità opzionale kubernetes): connessioni associate al relativo pod, namespace e container, mostrate nel pannello dei dettagli, nelle esportazioni JSON/PCAPNG e nei filtri pod:, ns:, container:. Abilitata nell'immagine Docker ufficiale; su un cluster, usa il plugin kubectl-rustnet per eseguirlo come pod di debug effimero. Vedi USAGE.md.
  • Multi-piattaforma: Linux, macOS, Windows, FreeBSD.

Perché RustNet?

RustNet colma il divario tra i semplici strumenti di connessione (netstat, ss) e gli analizzatori di pacchetti (Wireshark, tcpdump):

  • Attribuzione dei processi: Scopri quale applicazione possiede ogni connessione. Wireshark non può fornire questa informazione perché vede solo pacchetti, non socket.
  • Vista incentrata sulle connessioni: Monitora stati, larghezza di banda e protocolli per ogni connessione in tempo reale
  • Compatibile con SSH: La TUI funziona via SSH, così puoi vedere rapidamente cosa sta succedendo su un server remoto senza inoltrare X11 o catturare traffico

RustNet integra gli strumenti di cattura dei pacchetti. Usa RustNet per vedere cosa sta creando le connessioni. Per un'ispezione diretta con Wireshark, --pcapng-export scrive commenti live sui pacchetti con contesto PID/processo, in modalità best-effort. Per la correlazione a posteriori, usa --pcap-export insieme al sidecar JSONL e all'opzionale scripts/pcap_enrich.py. Vedi Esportazione PCAP e Confronto con strumenti simili per i dettagli.

Basato su ratatui, libpcap, eBPF (libbpf-rs), DashMap, crossbeam, ring, MaxMind GeoLite2 e Landlock. Vedi ARCHITECTURE.md per la ripartizione completa delle dipendenze.

Identificazione avanzata dei processi con eBPF (predefinita su Linux)

RustNet usa programmi eBPF del kernel per impostazione predefinita su Linux, per una maggiore performance e un'identificazione dei processi con overhead ridotto.

Nomi dei processi:

  • eBPF registra il TGID del leader del gruppo di processi e il nome comm (un campo del kernel limitato a 16 caratteri) anziché il nome del thread attivo, quindi le applicazioni multi-thread mostrano il nome del processo principale invece di nomi di thread come "Socket Thread"
  • RustNet quindi ri-risolve il nome corrente tramite /proc/<tgid>/comm, recupera i nomi troncati da comm dal nome del file eseguibile (es. "chromium-browse" diventa "chromium-browser") e risolve il percorso completo dell'eseguibile mostrato nella vista Dettagli
  • I processi di breve durata che terminano prima dell'esecuzione di questo arricchimento mantengono il nome di 16 caratteri registrato da eBPF

Comportamento di fallback:

  • Quando eBPF non riesce a caricarsi o non dispone dei permessi sufficienti, RustNet ripiega automaticamente sull'identificazione standard dei processi basata su procfs
  • La modalità standard risolve i nomi allo stesso modo tramite la scansione di procfs, ma con un overhead CPU maggiore
  • eBPF è abilitato per impostazione predefinita; non sono necessari flag di build speciali

Per disabilitare eBPF e usare la sola modalità procfs, compila con:

cargo build --release --no-default-features

Vedi ARCHITECTURE.md per informazioni tecniche.

Monitoraggio dell'attività dei processi e delle interfacce

RustNet combina la contabilizzazione del traffico a livello di processo con le statistiche delle interfacce di rete in tempo reale:

  • Scheda Panoramica: Mostra le interfacce attive con velocità, errori e perdite correnti
  • Scheda Attività (premi 3): Classifica i processi per Egress (TX) o Ingress (RX), includendo traffico trattenuto e a rotazione, velocità, quote, connessioni e destinazioni
  • Flusso di lavoro di sicurezza: Ordina per Egress, individua un uploader inatteso, quindi ispeziona il suo peer remoto principale e il traffico trattenuto anche dopo la chiusura della connessione
  • Dettagli interfaccia (premi i in Attività): Mostra le metriche complete originali per ogni interfaccia
  • Multi-piattaforma: Linux (sysfs), macOS/FreeBSD (getifaddrs), Windows (API GetIfTable2)
  • Filtraggio intelligente: Windows esclude automaticamente gli adattatori virtuali/filtro

Vedi USAGE.md per la documentazione dettagliata su come interpretare le statistiche delle interfacce e il comportamento specifico delle piattaforme.

Metriche disponibili:

  • Byte e pacchetti totali (RX/TX)
  • Contatori degli errori (ricezione e trasmissione)
  • Perdite di pacchetti (overflow delle code)
  • Collisioni (legacy, usate raramente sulle reti moderne)

Le statistiche vengono raccolte ogni 2 secondi in un thread in background con un impatto minimo sulle prestazioni.

Screenshot

Panoramica
Tabella delle connessioni con statistiche live e sparkline
Dettagli
SNI, cifrario, GeoIP e DPI per connessione
Grafico
Grafico del traffico, distribuzione delle app, processi principali
Attività
Egress/ingress dei processi, copertura di 60 secondi, attribuzione e peer remoti

Avvio rapido

Installazione

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

Da 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

Altre piattaforme:

Esecuzione di RustNet

La cattura dei pacchetti richiede privilegi elevati:

# 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

Opzioni comuni:

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

Il tema e le personalizzazioni per singolo colore possono essere impostati anche in ~/.config/rustnet/config.toml; --theme ha la precedenza. Vedi USAGE.md per lo schema.

Vedi INSTALL.md per la configurazione dettagliata dei permessi e USAGE.md per le opzioni complete.

Se imposti le capability ma la TUI mostra ancora eBPF unavailable, consulta eBPF non disponibile nonostante le capability impostate nella sezione di risoluzione dei problemi.

Controlli da tastiera

TastoAzione
qEsci (premi due volte per confermare)
Ctrl+CEsci immediatamente
xCancella tutte le connessioni (premi due volte per confermare)
Tab o ]Scheda successiva
Shift+Tab o [Scheda precedente
15Vai a Panoramica / Dettagli / Attività / Grafico / Aiuto
↑/k ↓/jNaviga su/giù
g GVai alla prima/ultima connessione
EnterVisualizza i dettagli della connessione
EscTorna indietro o cancella il filtro
cCopia l'indirizzo remoto
pAttiva/disattiva nomi servizi/porte
dAttiva/disattiva hostname/IP in Panoramica o Egress/Ingress in Attività
s SScorri le colonne di ordinamento / inverti la direzione
aAttiva/disattiva il raggruppamento per processo
SpaceEspandi/comprimi il gruppo di processi
←/→ o h/lComprimi/espandi il gruppo
PageUp/PageDown o Ctrl+B/FNavigazione tra le pagine
tAttiva/disattiva le connessioni storiche (chiuse)
iAttiva/disattiva le info di sistema in Panoramica o i dettagli dell'interfaccia in Attività
rReimposta la vista (raggruppamento, ordinamento, filtro)
/Entra in modalità filtro
hAttiva/disattiva l'aiuto

Vedi USAGE.md per i controlli da tastiera dettagliati e i suggerimenti di navigazione.

Filtri e ordinamento

Esempi rapidi di filtri:

/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

Ordinamento:

  • Premi s per scorrere le colonne ordinabili (Processo, Indirizzi, Servizio, Applicazione, Stato, Larghezza di banda)
  • Premi S (Shift+s) per invertire la direzione di ordinamento
  • Trova i maggiori consumatori di banda: premi s finché non appare "Bandwidth Total ↓" (ordina per velocità combinata su+giù)

Vedi USAGE.md per la sintassi completa dei filtri e la guida all'ordinamento.

Esempi avanzati di filtri

Filtri per parola chiave:

  • port:44 - Porte che contengono "44" (443, 8080, 4433)
  • sport:80 - Porte sorgente che contengono "80"
  • dport:443 - Porte di destinazione che contengono "443"
  • src:192.168 - IP sorgente che contengono "192.168"
  • dst:github.com - Destinazioni che contengono "github.com"
  • process:ssh - Nomi di processo che contengono "ssh"
  • sni:api - Hostname SNI che contengono "api"
  • app:openssh - Connessioni SSH che usano OpenSSH
  • state:established - Filtra per stato del protocollo
  • proto:tcp - Filtra per tipo di protocollo

Filtri per stato:

  • state:syn_recv - Connessioni half-open (rilevamento SYN flood)
  • state:established - Solo connessioni stabilite
  • state:quic_connected - Connessioni QUIC attive
  • state:dns_query - Connessioni di query DNS

Esempi combinati:

  • sport:80 process:nginx - Connessioni Nginx dalla porta 80
  • dport:443 sni:google.com - HTTPS verso Google
  • process:firefox state:quic_connected - Connessioni QUIC di Firefox
  • dport:22 app:openssh state:established - Connessioni OpenSSH stabilite
Ciclo di vita delle connessioni e indicatori visivi

RustNet usa timeout intelligenti e avvisi visivi prima di rimuovere le connessioni:

Indicatori visivi di inattività:

  • Bianco: Attiva (< 75% del timeout)
  • Giallo: Inattiva (75-90% del timeout)
  • Rosso: Critica (> 90% del timeout)

Timeout consapevoli del protocollo:

  • HTTP/HTTPS: 10 minuti (supporta keep-alive)
  • SSH: 30 minuti (sessioni lunghe)
  • TCP generico stabilita: 5 minuti
  • QUIC connessa: 3 minuti (o il timeout di inattività dei transport-param del peer, se presente); Initial/Handshaking: 60 secondi
  • DNS: 30 secondi
  • TCP CLOSED: 15 secondi di grazia prima dell'archiviazione

Esempio: una connessione HTTP diventa gialla a 7,5 minuti, rossa a 9 minuti e viene rimossa a 10 minuti.

Vedi USAGE.md per i dettagli completi sui timeout.

Documentazione

  • INSTALL.md - Istruzioni di installazione dettagliate per tutte le piattaforme, configurazione dei permessi e risoluzione dei problemi
  • USAGE.md - Guida completa all'uso, incluse opzioni da riga di comando, filtri, ordinamento e logging
  • SECURITY.md - Funzionalità di sicurezza, incluso il sandboxing Landlock e la gestione dei privilegi
  • ARCHITECTURE.md - Architettura tecnica, implementazioni per piattaforma e dettagli sulle prestazioni
  • CONTRIBUTING.md - Flusso di lavoro per i contributi, requisiti di qualità e linee guida del progetto
  • PROFILING.md - Guida al profiling delle prestazioni con configurazione dei flamegraph e suggerimenti di ottimizzazione
  • ROADMAP.md - Funzionalità pianificate e miglioramenti futuri
  • RELEASE.md - Processo di release per i maintainer

Contributi

I contributi sono benvenuti! Consulta CONTRIBUTING.md per le linee guida su come contribuire.

Vedi CONTRIBUTORS.md per l'elenco delle persone che hanno contribuito a questo progetto.

Licenza

Questo progetto è concesso in licenza secondo la Apache License, Versione 2.0 - consulta il file LICENSE per i dettagli.

Riconoscimenti

  • Costruito con ratatui per l'interfaccia a terminale
  • Cattura dei pacchetti basata su libpcap
  • Ispirato a strumenti come tshark/wireshark/tcpdump, sniffnet, netstat, ss, iftop e bandwhich
  • Parte del codice è vibe coded (OMG) / che gli dèi delle LLM siano con voi

Documentazione spostata

Alcune sezioni sono state spostate in file dedicati per una migliore organizzazione:

Categorie