
Surveillance réseau par processus pour votre terminal avec inspection approfondie des paquets. Multi-plateforme, isolé.
Surveillance réseau par processus pour votre terminal : connexions TCP, UDP et QUIC en direct avec inspection approfondie des paquets, sandbox par défaut.
Visibilité en temps réel sur chaque connexion effectuée par votre machine, à qui elle appartient, et quel protocole elle utilise. Pas de tcpdump, de transfert X11 ni de pipe root.
netstat / ss ne peuvent pas afficher l'état en direct.--pcapng-export écrit une capture prête pour Wireshark avec le processus, le PID, la direction, le DPI/SNI et GeoIP intégrés sous forme de commentaires par paquet. Ouvrez-la dans Wireshark et chaque paquet nomme déjà son processus propriétaire, sans post-traitement. Un --pcap-export classique avec un fichier sidecar JSONL pour la corrélation hors ligne est également disponible.t pour conserver les connexions historiques (fermées) visibles à des fins forensiques.RustNet comble le fossé entre les outils de connexion simples (netstat, ss) et les analyseurs de paquets (Wireshark, tcpdump) :
RustNet complète les outils de capture de paquets. Utilisez RustNet pour voir ce qui établit des connexions. Pour une inspection directe avec Wireshark, --pcapng-export écrit des commentaires de paquets best-effort en direct avec le contexte PID/processus. Pour une corrélation au moment du nettoyage, utilisez --pcap-export avec le sidecar JSONL et le script optionnel scripts/pcap_enrich.py. Voir PCAP Export et Comparison with Similar Tools pour plus de détails.
Construit sur ratatui, libpcap, eBPF (libbpf-rs), DashMap, crossbeam, ring, MaxMind GeoLite2 et Landlock. Voir ARCHITECTURE.md pour la répartition complète des dépendances.
RustNet utilise par défaut des programmes eBPF du noyau sous Linux pour de meilleures performances et une identification des processus à moindre surcoût.
Noms des processus :
comm (un champ du noyau limité à 16 caractères) plutôt que le nom du thread actif, de sorte que les applications multithread affichent le nom du processus principal au lieu de noms de threads comme « Socket Thread »/proc/<tgid>/comm, récupère les noms tronqués par comm à partir du nom du fichier exécutable (par ex. « chromium-browse » devient « chromium-browser »), et résout le chemin complet de l'exécutable affiché dans la vue DétailsComportement de repli :
Pour désactiver eBPF et utiliser le mode procfs uniquement, compilez avec :
cargo build --release --no-default-features
Voir ARCHITECTURE.md pour des informations techniques.
RustNet combine la comptabilité du trafic au niveau des processus avec des statistiques d'interface réseau en temps réel :
3) : classe les processus par Egress (TX) ou Ingress (RX), y compris le trafic conservé et glissant, les débits, les parts, les connexions et les destinationsi dans Activity) : affiche les métriques complètes d'origine pour chaque interfaceVoir USAGE.md pour une documentation détaillée sur l'interprétation des statistiques d'interface et le comportement spécifique à chaque plateforme.
Métriques disponibles :
Les statistiques sont collectées toutes les 2 secondes dans un thread en arrière-plan avec un impact minimal sur les performances.
Homebrew (macOS / Linux) :
brew install rustnet
Ubuntu (22.04 LTS+) / Linux Mint 21+ / Pop!_OS 22.04+ :
sudo add-apt-repository ppa:domcyrus/rustnet
# sur 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
# Ensuite, dans le shell : sudo rustnet
Depuis crates.io :
cargo install rustnet-monitor
Windows (Chocolatey) :
# À exécuter dans PowerShell en mode Administrateur
# Nécessite Npcap (https://npcap.com) installé avec « WinPcap API-compatible Mode » activé
choco install rustnet
Autres plateformes :
La capture de paquets nécessite des privilèges élevés :
# Démarrage rapide (toutes les plateformes)
sudo rustnet
# Linux : accorder des capabilities pour exécuter sans sudo (recommandé)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet
Options courantes :
rustnet -i eth0 # Spécifier l'interface réseau
rustnet --show-localhost # Afficher les connexions localhost
rustnet --no-resolve-dns # Désactiver les résolutions DNS inverses (activées par défaut)
rustnet -r 500 # Définir l'intervalle d'actualisation (ms)
rustnet --theme tokyo-night # Thème : muted (défaut), vivid, catppuccin-mocha, tokyo-night, gruvbox, nord
rustnet --pcapng-export capture.pcapng # PCAPNG annoté pour Wireshark
Le thème et les surcharges par couleur peuvent également être définis dans ~/.config/rustnet/config.toml ; --theme a la priorité. Voir USAGE.md pour le schéma.
Voir INSTALL.md pour la configuration détaillée des permissions et USAGE.md pour toutes les options.
Si vous définissez les capabilities mais que l'interface TUI affiche toujours
eBPF unavailable, consultez eBPF Unavailable Despite Capabilities Being Set dans la section de dépannage.
Voir USAGE.md pour les contrôles clavier détaillés et les conseils de navigation.
Exemples de filtrage rapide :
/google # Rechercher « google » partout
/port:443 # Filtrer par port
/process:firefox # Filtrer par processus
/state:established # Filtrer par état de connexion
/dport:443 sni:github.com # Combiner des filtres
Tri :
s pour parcourir les colonnes triables (Processus, Adresses, Service, Application, État, Bande passante)S (Shift+s) pour basculer la direction du tris jusqu'à ce que « Bandwidth Total ↓ » apparaisse (trie par vitesse combinée montante+descendante)Voir USAGE.md pour la syntaxe complète de filtrage et le guide de tri.
Filtres par mot-clé :
port:44 - Ports contenant « 44 » (443, 8080, 4433)sport:80 - Ports sources contenant « 80 »dport:443 - Ports de destination contenant « 443 »src:192.168 - IP sources contenant « 192.168 »dst:github.com - Destinations contenant « github.com »process:ssh - Noms de processus contenant « ssh »sni:api - Noms d'hôtes SNI contenant « api »app:openssh - Connexions SSH utilisant OpenSSHstate:established - Filtrer par état de protocoleproto:tcp - Filtrer par type de protocoleFiltrage par état :
state:syn_recv - Connexions semi-ouvertes (détection d'inondation SYN)RustNet utilise des délais d'attente intelligents et des avertissements visuels avant de supprimer les connexions :
Indicateurs visuels de fraîcheur :
Délais d'attente adaptés au protocole :
Initial/Handshaking : 60 secondesExemple : une connexion HTTP passe au jaune à 7,5 min, au rouge à 9 min, et est supprimée à 10 min.
Voir USAGE.md pour tous les détails sur les délais d'attente.
Les contributions sont les bienvenues ! Veuillez consulter CONTRIBUTING.md pour les directives sur la façon de contribuer.
Voir CONTRIBUTORS.md pour la liste des personnes qui ont contribué à ce projet.
Ce projet est sous licence Apache License, Version 2.0 - voir le fichier LICENSE pour plus de détails.
tshark/wireshark/tcpdump, sniffnet, netstat, ss, iftop et bandwhichCertaines sections ont été déplacées vers des fichiers dédiés pour une meilleure organisation :
port:, src:, dst:, sni:, process:, state:, proto:, plus les regex via /(?i)pattern/.kubernetes) : les connexions sont associées à leur pod, namespace et conteneur, affichés dans le panneau de détails, les exports JSON/PCAPNG et les filtres pod:, ns:, container:. Activée dans l'image Docker officielle ; sur un cluster, utilisez le plugin kubectl-rustnet pour l'exécuter en tant que pod de débogage éphémère. Voir USAGE.md.| Overview Tableau des connexions avec statistiques en direct et sparklines ![]() | Details SNI, chiffrement, GeoIP, DPI par connexion ![]() |
| Graph Graphique du trafic, répartition des applications, principaux processus ![]() | Activity Egress/ingress des processus, couverture de 60 secondes, attribution et pairs distants ![]() |
| Touche | Action |
|---|
q | Quitter (appuyer deux fois pour confirmer) |
Ctrl+C | Quitter immédiatement |
x | Effacer toutes les connexions (appuyer deux fois pour confirmer) |
Tab ou ] | Onglet suivant |
Shift+Tab ou [ | Onglet précédent |
1–5 | Aller à Overview / Details / Activity / Graph / Help |
↑/k ↓/j | Naviguer vers le haut/bas |
g G | Aller à la première/dernière connexion |
Enter | Voir les détails de la connexion |
Esc | Revenir en arrière ou effacer le filtre |
c | Copier l'adresse distante |
p | Basculer noms de services/ports |
d | Basculer noms d'hôtes/IP sur Overview ou Egress/Ingress sur Activity |
s S | Parcourir les colonnes de tri / basculer la direction |
a | Basculer le regroupement par processus |
Space | Développer/réduire le groupe de processus |
←/→ ou h/l | Réduire/développer le groupe |
PageUp/PageDown ou Ctrl+B/F | Navigation par pages |
t | Basculer les connexions historiques (fermées) |
i | Basculer les infos système sur Overview ou les détails d'interface sur Activity |
r | Réinitialiser la vue (regroupement, tri, filtre) |
/ | Entrer en mode filtre |
h | Basculer l'aide |
state:established - Connexions établies uniquementstate:quic_connected - Connexions QUIC activesstate:dns_query - Connexions de requête DNSExemples combinés :
sport:80 process:nginx - Connexions Nginx depuis le port 80dport:443 sni:google.com - HTTPS vers Googleprocess:firefox state:quic_connected - Connexions QUIC de Firefoxdport:22 app:openssh state:established - Connexions OpenSSH établies