Moniteur réseau

Un outil de surveillance des connexions réseau en temps réel construit avec Rust et GTK4, affichant les connexions actives avec des statistiques d'E/S en direct dans une interface graphique moderne.

Fonctionnalités
- Surveillance en temps réel : surveille en continu les connexions réseau actives
- Statistiques d'E/S : affiche les taux d'envoi/réception en direct pour chaque connexion
- Identification des processus : affiche le programme et le PID associés à chaque connexion
- Interface GTK4 moderne : interface graphique propre et réactive avec le style Libadwaita
- Interface terminal (TUI) : interface terminal interactive avec les mêmes capacités de surveillance
- Résolution d'adresses : simplifie les adresses courantes (localhost, any, mDNS)
- Filtrage des connexions : filtre les connexions localhost pour une sortie plus propre
- Intégration GNOME : prise en charge correcte de la classe WM pour l'épinglage au dock et l'intégration au bureau
- Double installation : prend en charge l'installation locale à l'utilisateur et à l'échelle du système
- Gestion robuste des erreurs : récupération complète des erreurs avec des instructions d'installation claires
- Performances optimisées : mise en cache des processus et de la mise en page pour une meilleure réactivité
Prérequis
- Rust 1.70+ (édition 2021)
- Bibliothèques de développement GTK4
- Bibliothèques de développement Libadwaita
- Système Linux avec système de fichiers
/proc
- Linux 5.8+ (pour les capacités granulaires eBPF)
- Rust nightly et
bpf-linker (pour la compilation eBPF)
Installation sur Ubuntu/Debian :
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
Installation sur Fedora :
sudo dnf install gtk4-devel libadwaita-devel
Installation
Méthode 1 : Installer depuis les sources avec intégration au bureau
- Clonez le dépôt :
git clone <repository-url>
cd network-monitor
- Installez localement (sudo non requis) :
- Ou installez à l'échelle du système (nécessite sudo) :
sudo ./scripts/install.sh
Le script d'installation va :
- Compiler les binaires GTK4 et TUI (debug en local, release à l'échelle du système)
- Installer les binaires dans
~/.local/bin/ (local) ou /usr/local/bin/ (système)
- Installer le fichier .desktop avec la classe WM appropriée pour l'épinglage au dock GNOME
- Installer les icônes dans les répertoires d'icônes appropriés
- Mettre à jour le cache d'icônes et la base de données des bureaux
- Garantir que l'application peut être épinglée au dock/tableau de bord GNOME
Méthode 2 : Compiler et exécuter directement
- Clonez le dépôt :
git clone <repository-url>
cd network-monitor
- Compilez et exécutez :
Ou compilez en mode release :
cargo build --release
./target/release/network-monitor
Méthode 3 : Compiler et exécuter la version TUI
- Clonez le dépôt :
git clone <repository-url>
cd network-monitor
- Compilez et exécutez la TUI :
cargo build --bin nmt
./target/debug/nmt
Ou compilez en mode release :
cargo build --release --bin nmt
./target/release/nmt
Désinstallation
Supprimer la version installée
Suppression de l'installation locale :
Suppression à l'échelle du système (nécessite sudo) :
sudo ./scripts/uninstall.sh
Le script de désinstallation supprimera le binaire, le fichier .desktop et les icônes des emplacements appropriés et mettra à jour tous les caches concernés.
Utilisation
Interface graphique GTK4
Lancez l'application de surveillance réseau :
L'application ouvrira une fenêtre GTK4 affichant :
- Processus(ID) : nom du processus et PID avec un mappage précis socket-vers-processus
- Protocole : protocole TCP/UDP
- Source : point de terminaison local (résolu dans un format lisible)
- Destination : point de terminaison distant (résolu dans un format lisible)
- Statut : état de la connexion (ESTABLISHED, LISTEN, etc.)
- TX : taux d'envoi calculé à partir des statistiques d'E/S du processus
- RX : taux de réception calculé à partir des statistiques d'E/S du processus
- Chemin : chemin complet de la commande et arguments depuis
/proc/[pid]/cmdline
Interface terminal (TUI)

Lancez l'interface terminal :
La TUI offre les mêmes capacités de surveillance dans une interface terminal interactive :
Commandes clés :
q - Quitter l'application
r - Actualiser manuellement les connexions
a - Activer/désactiver l'actualisation automatique (intervalles de 2 secondes)
↑/↓ - Naviguer parmi les connexions
←/→ - Faire défiler le tableau horizontalement
1-8 - Trier par colonnes (Processus(ID), Protocole, Source, Destination, Statut, TX, RX, Chemin)
Fonctionnalités :
- Surveillance des connexions en temps réel avec actualisation automatique
- Colonnes triables avec indicateurs visuels
- Défilement horizontal pour les tableaux larges
- Dimensionnement intelligent des colonnes - la dernière colonne occupe toute la largeur restante
- Protocoles codés par couleur (TCP/TCP6 en vert, UDP/UDP6 en jaune)
- Mise en évidence de la connexion active
- Informations sur le processus et le PID
- Affichage en direct des taux d'E/S
- Même ordre des colonnes que la version GTK4 pour la cohérence
Résolution d'adresses
Les adresses courantes sont simplifiées pour la lisibilité :
0.0.0.0:* ou *:* → ANY
127.0.0.1:* ou [::1]:* → LOCALHOST
224.0.0.251:* → MDNS
Backend eBPF (piloté par événements)
L'application utilise des kprobes au niveau du noyau (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) au lieu d'interroger /proc/net. Cela offre :
- Piloté par événements : livraison des événements en moins d'une milliseconde, aucun surcoût d'interrogation (~1 à 3 % du CPU)
- PID direct : capturé au point de sonde via
bpf_get_current_pid_tgid(), sans analyse des inodes
- Connexions de courte durée : jamais manquées entre les intervalles d'interrogation
Mode eBPF
Le backend eBPF fournit une surveillance des connexions pilotée par événements avec un surcoût réduit et des événements
en temps réel, par rapport à l'approche d'interrogation par défaut de /proc/net. Il peut capturer les connexions de courte durée
que l'interrogation pourrait manquer.
Prérequis :
rustup toolchain install nightly
cargo install bpf-linker
Compiler et exécuter :
Exécuter en tant qu'utilisateur normal (noyau 5.8+ requis) :
Accordez une fois les capacités Linux requises au binaire :
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor
./target/debug/network-monitor
Ou pour la version TUI :
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt
./target/debug/nmt
Pour les compilations release, ajustez le chemin en conséquence :
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
L'application se fermera avec un message de configuration si eBPF n'est pas disponible (capacités manquantes ou
noyau non pris en charge).
Architecture
- GTK4 : framework d'interface graphique moderne multiplateforme
- Libadwaita : composants d'interface de style GNOME
- Tokio : runtime asynchrone pour les opérations concurrentes
- Aya + eBPF : traçage des connexions au niveau du noyau avec des kprobes pour des événements en temps réel
- PID direct : identification du processus via
bpf_get_current_pid_tgid() au point de sonde
- Appels système : lecture directe de
/proc/[pid]/io pour les statistiques d'E/S
- Gestion des erreurs : types d'erreurs complets avec récupération gracieuse via
thiserror
- Cache de performance : mise en cache de la mise en page de l'interface pour des performances optimales
Paquets Linux

Dons
Si vous trouvez ce projet utile, envisagez de faire un don pour soutenir son développement.
- Monero :
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv
- Bitcoin :
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
Licence
Ce projet est open source. Consultez le fichier LICENSE pour plus de détails.