
rustnet v1.6.0
Surveillance réseau par processus pour votre terminal avec inspection approfondie des paquets. Multi-plateforme, isolé.
RustNet
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.
Fonctionnalités
- Attribution par processus : chaque connexion TCP, UDP et QUIC est associée à son processus propriétaire, via eBPF sous Linux, PKTAP sous macOS, ETW avec un repli automatique IP Helper sous Windows, et les API natives sous FreeBSD. Les détails incluent le PID, l'exécutable, les noms d'utilisateur/groupe, la confiance de correspondance et une chaîne de processus parents plafonnée sur toutes les plateformes. Wireshark et tcpdump ne peuvent pas faire cela ;
netstat/ssne peuvent pas afficher l'état en direct. - Inspection approfondie des paquets : identification de HTTP, HTTPS/TLS avec SNI, DNS, SSH, FTP, QUIC, MQTT, BitTorrent, STUN, NTP, mDNS, LLMNR, DHCP, SNMP, SSDP et NetBIOS, sans disséqueurs externes.
- Export PCAPNG annoté :
--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-exportclassique avec un fichier sidecar JSONL pour la corrélation hors ligne est également disponible. - Sandbox de sécurité : Landlock (Linux 5.13+), Seatbelt (macOS), suppression de privilèges par jeton + blocage des processus enfants par job object (Windows). Les privilèges sont abandonnés immédiatement après l'initialisation de libpcap. Voir SECURITY.md.
- Analyses réseau : temps d'aller-retour en temps réel pour TCP, les poignées de main QUIC, les réponses DNS et l'écho ICMP, plus la détection de retransmission TCP, de hors-séquence et de fast retransmit.
- Cycle de vie intelligent des connexions : délais d'attente adaptés au protocole avec indicateurs de fraîcheur blanc → jaune → rouge. Basculez avec
tpour conserver les connexions historiques (fermées) visibles à des fins forensiques. - Filtrage style Vim/fzf :
port:,src:,dst:,sni:,process:,state:,proto:, plus les regex via/(?i)pattern/. - Enrichissement GeoIP : recherche de pays via MaxMind GeoLite2 local. Aucun appel réseau.
- Identification des périphériques LAN : adresse MAC et fabricant (à partir de la base de données IEEE OUI intégrée) pour les pairs sur le lien et la passerelle, appris passivement à partir du trafic ARP et affichés dans le panneau de détails.
- Attribution Kubernetes (fonctionnalité optionnelle
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 filtrespod:,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. - Multi-plateforme : Linux, macOS, Windows, FreeBSD.
Pourquoi RustNet ?
RustNet comble le fossé entre les outils de connexion simples (netstat, ss) et les analyseurs de paquets (Wireshark, tcpdump) :
- Attribution des processus : voyez quelle application possède chaque connexion. Wireshark ne peut pas fournir cela car il ne voit que des paquets, pas des sockets.
- Vue centrée sur les connexions : suivez les états, la bande passante et les protocoles par connexion en temps réel
- Compatible SSH : l'interface TUI fonctionne via SSH pour voir rapidement ce qui se passe sur un serveur distant sans transférer X11 ni capturer le trafic
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.
Identification de processus améliorée par eBPF (défaut Linux)
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 :
- eBPF enregistre le TGID du chef de groupe de processus et le nom
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 » - RustNet re-résout ensuite le nom actuel via
/proc/<tgid>/comm, récupère les noms tronqués parcommà 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étails - Les processus de courte durée qui se terminent avant que cet enrichissement ne s'exécute conservent le nom de 16 caractères enregistré par eBPF
Comportement de repli :
- Lorsque eBPF ne se charge pas ou manque de permissions suffisantes, RustNet revient automatiquement à l'identification de processus standard basée sur procfs
- Le mode standard résout les noms de la même manière via l'analyse de procfs, mais avec un surcoût CPU plus élevé
- eBPF est activé par défaut ; aucune option de compilation spéciale n'est nécessaire
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.
Surveillance de l'activité des processus et des interfaces
RustNet combine la comptabilité du trafic au niveau des processus avec des statistiques d'interface réseau en temps réel :
- Onglet Overview : affiche les interfaces actives avec les débits, erreurs et pertes actuels
- Onglet Activity (appuyez sur
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 destinations - Workflow de sécurité : triez par Egress, identifiez un uploader inattendu, puis inspectez son pair distant principal et le trafic conservé même après la fermeture de la connexion
- Détails des interfaces (appuyez sur
idans Activity) : affiche les métriques complètes d'origine pour chaque interface - Multi-plateforme : Linux (sysfs), macOS/FreeBSD (getifaddrs), Windows (API GetIfTable2)
- Filtrage intelligent : Windows exclut automatiquement les adaptateurs virtuels/filtres
Voir 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 :
- Octets et paquets totaux (RX/TX)
- Compteurs d'erreurs (réception et émission)
- Pertes de paquets (débordements de file d'attente)
- Collisions (héritage, rarement utilisées sur les réseaux modernes)
Les statistiques sont collectées toutes les 2 secondes dans un thread en arrière-plan avec un impact minimal sur les performances.
Captures d'écran
| 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 ![]() |
Démarrage rapide
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
# 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 :
- FreeBSD : téléchargement depuis rustnet-bsd releases
- Docker, compilation depuis les sources, autres distributions Linux : voir INSTALL.md pour des instructions détaillées
Exécuter RustNet
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.
Contrôles clavier
| 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 |
Voir USAGE.md pour les contrôles clavier détaillés et les conseils de navigation.
Filtrage et tri
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 :
- Appuyez sur
spour parcourir les colonnes triables (Processus, Adresses, Service, Application, État, Bande passante) - Appuyez sur
S(Shift+s) pour basculer la direction du tri - Trouvez les consommateurs de bande passante : appuyez sur
sjusqu'à 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.
Exemples de filtrage avancé
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 protocole
Filtrage par état :
state:syn_recv- Connexions semi-ouvertes (détection d'inondation SYN)state:established- Connexions établies uniquementstate:quic_connected- Connexions QUIC activesstate:dns_query- Connexions de requête DNS
Exemples 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
Cycle de vie des connexions et indicateurs visuels
RustNet utilise des délais d'attente intelligents et des avertissements visuels avant de supprimer les connexions :
Indicateurs visuels de fraîcheur :
- Blanc : actif (< 75 % du délai d'attente)
- Jaune : périmé (75-90 % du délai d'attente)
- Rouge : critique (> 90 % du délai d'attente)
Délais d'attente adaptés au protocole :
- HTTP/HTTPS : 10 minutes (prend en charge keep-alive)
- SSH : 30 minutes (longues sessions)
- TCP générique établi : 5 minutes
- QUIC connecté : 3 minutes (ou le délai d'inactivité des paramètres de transport du pair, lorsqu'il est présent) ;
Initial/Handshaking: 60 secondes - DNS : 30 secondes
- TCP CLOSED : 15 secondes de grâce d'archivage
Exemple : 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.
Documentation
- INSTALL.md - Instructions d'installation détaillées pour toutes les plateformes, configuration des permissions et dépannage
- USAGE.md - Guide d'utilisation complet comprenant les options de ligne de commande, le filtrage, le tri et la journalisation
- SECURITY.md - Fonctionnalités de sécurité, y compris le sandbox Landlock et la gestion des privilèges
- ARCHITECTURE.md - Architecture technique, implémentations par plateforme et détails de performance
- CONTRIBUTING.md - Workflow de contribution, exigences de qualité et directives du projet
- PROFILING.md - Guide de profilage des performances avec configuration flamegraph et conseils d'optimisation
- ROADMAP.md - Fonctionnalités planifiées et améliorations futures
- RELEASE.md - Processus de publication pour les mainteneurs
Contribuer
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.
Licence
Ce projet est sous licence Apache License, Version 2.0 - voir le fichier LICENSE pour plus de détails.
Remerciements
- Construit avec ratatui pour l'interface terminal
- Capture de paquets propulsée par libpcap
- Inspiré par des outils comme
tshark/wireshark/tcpdump,sniffnet,netstat,ss,iftopet bandwhich - Une partie du code est vibe codée (OMG) / que les dieux des LLM soient avec vous
Documentation déplacée
Certaines sections ont été déplacées vers des fichiers dédiés pour une meilleure organisation :
- Configuration des permissions : désormais dans INSTALL.md - Permissions Setup
- Instructions d'installation : désormais dans INSTALL.md
- Utilisation détaillée : désormais dans USAGE.md
- Détails de l'architecture : désormais dans ARCHITECTURE.md



