
rustnet v1.6.0
Monitoraggio di rete per processo per il tuo terminale con ispezione profonda dei pacchetti. Multipiattaforma, in sandbox.
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.
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/ssnon 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-exportscrive 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-exportcon 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
tper 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 filtripod:,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 dacommdal 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
iin 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:
- FreeBSD: Scarica dalle release rustnet-bsd
- Docker, build da sorgente, altre distribuzioni Linux: Vedi INSTALL.md per istruzioni dettagliate
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
| Tasto | Azione |
|---|---|
q | Esci (premi due volte per confermare) |
Ctrl+C | Esci immediatamente |
x | Cancella tutte le connessioni (premi due volte per confermare) |
Tab o ] | Scheda successiva |
Shift+Tab o [ | Scheda precedente |
1–5 | Vai a Panoramica / Dettagli / Attività / Grafico / Aiuto |
↑/k ↓/j | Naviga su/giù |
g G | Vai alla prima/ultima connessione |
Enter | Visualizza i dettagli della connessione |
Esc | Torna indietro o cancella il filtro |
c | Copia l'indirizzo remoto |
p | Attiva/disattiva nomi servizi/porte |
d | Attiva/disattiva hostname/IP in Panoramica o Egress/Ingress in Attività |
s S | Scorri le colonne di ordinamento / inverti la direzione |
a | Attiva/disattiva il raggruppamento per processo |
Space | Espandi/comprimi il gruppo di processi |
←/→ o h/l | Comprimi/espandi il gruppo |
PageUp/PageDown o Ctrl+B/F | Navigazione tra le pagine |
t | Attiva/disattiva le connessioni storiche (chiuse) |
i | Attiva/disattiva le info di sistema in Panoramica o i dettagli dell'interfaccia in Attività |
r | Reimposta la vista (raggruppamento, ordinamento, filtro) |
/ | Entra in modalità filtro |
h | Attiva/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
sper 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
sfinché 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 OpenSSHstate:established- Filtra per stato del protocolloproto:tcp- Filtra per tipo di protocollo
Filtri per stato:
state:syn_recv- Connessioni half-open (rilevamento SYN flood)state:established- Solo connessioni stabilitestate:quic_connected- Connessioni QUIC attivestate:dns_query- Connessioni di query DNS
Esempi combinati:
sport:80 process:nginx- Connessioni Nginx dalla porta 80dport:443 sni:google.com- HTTPS verso Googleprocess:firefox state:quic_connected- Connessioni QUIC di Firefoxdport: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,iftope 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:
- Configurazione dei permessi: Ora in INSTALL.md - Configurazione dei permessi
- Istruzioni di installazione: Ora in INSTALL.md
- Uso dettagliato: Ora in USAGE.md
- Dettagli sull'architettura: Ora in ARCHITECTURE.md



