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.

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 :
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
- Cloner le dépôt :
git clone <repository-url>
cd network-monitor
- Installer localement (sudo non requis) :
./scripts/install.sh
- Ou installer à l'échelle du système (sudo requis) :
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
- Cloner le dépôt :
git clone <repository-url>
cd network-monitor
- Compiler et exécuter :
cargo run
Ou compiler en mode release :
cargo build --release
./target/release/network-monitor
Méthode 3 : Compiler et exécuter la version TUI
- Cloner le dépôt :
git clone <repository-url>
cd network-monitor
- Compiler et exécuter la TUI :
cargo build --bin nmt
./target/debug/nmt
Ou compiler en mode release :
cargo build --release --bin nmt
./target/release/nmt
Désinstallation
Supprimer la version installée
Suppression de l'installation locale :
./scripts/uninstall.sh
Suppression à l'échelle du système (sudo requis) :
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 :
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 :
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
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 :