
Un outil de surveillance des connexions réseau en temps réel conçu avec Rust et GTK4, affichant les connexions actives avec des statistiques I/O en direct dans une interface graphique moderne.
# Network Monitor  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. [](https://github.com/grigio/network-monitor/actions/workflows/rust.yml) [](https://deps.rs/repo/github/grigio/network-monitor) ## Fonctionnalités - **Surveillance en temps réel** : Surveille en continu les connexions réseau actives - **Statistiques d'E/S** : Affiche les débits de téléversement/téléchargement en direct pour chaque connexion - **Identification des processus** : Affiche le programme et le PID associés à chaque connexion - **Actions sur les processus** : Clic droit sur une ligne pour copier sa valeur/commande ou pour tuer le processus qui possède la connexion (Terminate ou Force Kill, avec confirmation) - **Sélection persistante** : La ligne sélectionnée conserve sa surbrillance à travers les rafraîchissements et est affichée dans la bande d'état - **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 claire - **Intégration GNOME** : Prise en charge appropriée 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 conseils de configuration clairs - **Performances optimisées** : Mise en cache des processus et de la disposition 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 le 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 : ```bash sudo apt update sudo apt install libgtk-4-dev libadwaita-1-dev ``` ### Installation sur Fedora : ```bash sudo dnf install gtk4-devel libadwaita-devel ``` ## Installation ### Méthode 1 : Installer depuis les sources avec intégration au bureau 1. Cloner le dépôt : ```bash git clone <repository-url> cd network-monitor ``` 2. Installer localement (sudo non requis) : ```bash ./scripts/install.sh ``` 3. Ou installer à l'échelle du système (sudo requis) : ```bash sudo ./scripts/install.sh ``` Le script d'installation va : - Compiler les binaires GTK4 et TUI (debug pour local, release pour 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 desktop - S'assurer que l'application peut être épinglée au dock/tableau de bord GNOME ### Méthode 2 : Compiler et exécuter directement 1. Cloner le dépôt : ```bash git clone <repository-url> cd network-monitor ``` 2. Compiler et exécuter : ```bash cargo run ``` Ou compiler en mode release : ```bash cargo build --release ./target/release/network-monitor ``` ### Méthode 3 : Compiler et exécuter la version TUI 1. Cloner le dépôt : ```bash git clone <repository-url> cd network-monitor ``` 2. Compiler et exécuter la TUI : ```bash cargo build --bin nmt ./target/debug/nmt ``` Ou compiler en mode release : ```bash cargo build --release --bin nmt ./target/release/nmt ``` ## Désinstallation ### Supprimer la version installée Suppression de l'installation locale : ```bash ./scripts/uninstall.sh ``` Suppression à l'échelle du système (sudo requis) : ```bash 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 pertinents. ## Utilisation ### Interface graphique GTK4 Lancer l'application de surveillance réseau : ```bash cargo run ``` L'application ouvrira une fenêtre GTK4 affichant : - **Process(ID)** : Nom du processus et PID avec une correspondance précise socket-processus - **Protocol** : Protocole TCP/UDP - **Source** : Point de terminaison local (résolu en format lisible) - **Destination** : Point de terminaison distant (résolu en format lisible) - **Status** : État de la connexion (ESTABLISHED, LISTEN, etc.) - **TX** : Débit de téléversement calculé à partir des statistiques d'E/S du processus - **RX** : Débit de téléchargement calculé à partir des statistiques d'E/S du processus - **Path** : Chemin complet de la commande et arguments depuis `/proc/[pid]/cmdline` **Actions sur les lignes** - **Clic gauche** : sélectionner une ligne (également affichée dans la bande inférieure) - **Clic droit** : ouvrir le menu contextuel avec *Copy Value*, *Copy Command* et *Kill "process" (PID)*, qui demande s'il faut Terminate (SIGTERM) ou Force Kill (SIGKILL) - **Delete** : tuer la ligne actuellement sélectionnée (même boîte de dialogue de confirmation) - **Ctrl+C** : copier le contenu de la cellule - **Bouton Refresh** dans la barre d'en-tête : mettre à jour immédiatement (la liste se rafraîchit également toutes les 3s) ### Interface terminal (TUI)  Lancer l'interface terminal : ```bash cargo run --bin nmt ``` La TUI offre les mêmes capacités de surveillance dans une interface terminal interactive : **Contrôles clavier :** - `q` - Quitter l'application - `r` - Basculer la résolution des noms d'hôtes - `R` - Rafraîchir manuellement les connexions - `a` - Basculer le rafraîchissement automatique (intervalles de 2 secondes) - `↑/↓` - Naviguer à travers les connexions - `←/→` - Faire défiler le tableau horizontalement - `k` / **clic droit** - Ouvrir le menu kill pour une ligne (Terminate / Force Kill / Cancel) - `1-8` - Trier par colonnes (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path) Souris : clic gauche sélectionne une ligne, clic droit la sélectionne et ouvre le menu kill. **Fonctionnalités :** - Surveillance des connexions en temps réel avec rafraîchissement 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 surbrillance des connexions actives - Informations sur le processus et le PID - Affichage des débits d'E/S en direct - Même ordre de 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` ## Comment ça fonctionne ### 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 d'événements en moins d'une milliseconde, pas de surcharge d'interrogation (~1-3% CPU) - **PID direct** : Capturé au point de sonde via `bpf_get_current_pid_tgid()`, pas de scan d'inodes - **Connexions de courte durée** : Jamais manquées entre les intervalles d'interrogation ### Mode eBPF Le backend eBPF offre une surveillance des connexions **pilotée par événements** avec une surcharge réduite et des événements en temps réel, comparé à l'approche par interrogation `/proc/net` par défaut. Il peut capturer les connexions de courte durée que l'interrogation pourrait manquer. **Prérequis :** ```bash rustup toolchain install nightly cargo install bpf-linker ``` **Compiler et exécuter :** ```bash cargo build ``` **Exécuter en tant qu'utilisateur normal** (noyau 5.8+ requis) : Accorder une fois les capacités Linux requises au binaire : ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor ./target/debug/network-monitor ``` Ou pour la version TUI : ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt ./target/debug/nmt ``` Pour les builds release, ajustez le chemin en conséquence : ```bash 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 GUI multiplateforme moderne - **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 kprobes pour des événements en temps réel - **PID direct** : Identification des 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` - **Mise en cache des performances** : Mise en cache de la disposition de l'interface pour des performances optimales ## Paquets Linux [](https://repology.org/project/network-monitor/versions) ## Dons Si vous trouvez ce projet utile, veuillez envisager de faire un don pour soutenir son développement. - **Monero** : `88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv` - **Bitcoin** : `bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025` ## Licence Ce projet est open source. Voir le fichier LICENSE pour plus de détails.