Snitch – un outil `ss`/`netstat` plus convivial
(github.com/karol-broda)- Snitch est un outil d’inspection des connexions réseau plus lisible pour les humains que
ssounetstat, avec prise en charge d’une interface terminale (TUI) et de tableaux stylisés - Il affiche l’état des connexions dans un écran interactif en temps réel ou sous forme de tableau affiché en une seule fois, avec divers filtres comme TCP/UDP, écoute, connecté
- Il inclut des fonctions de sortie JSON·CSV, résolution DNS/noms de services, surveillance et arrêt de processus, ainsi que mise à jour automatique
- Il prend en charge plusieurs méthodes d’installation, notamment Homebrew, Go, Nix, Arch Linux, script shell et binaire, avec suppression automatique de l’avertissement Gatekeeper sur macOS
- C’est un outil utile pour les développeurs et les administrateurs système afin de surveiller intuitivement les connexions réseau et de l’utiliser dans l’automatisation par script
Vue d’ensemble
- Snitch est un outil conçu pour explorer visuellement les connexions réseau, pensé comme une alternative à
ssounetstat - Il affiche l’état des connexions via une interface TUI ou une sortie tabulaire stylisée
- Il fonctionne sous Linux et macOS, et peut nécessiter des droits root ou la capacité CAP_NET_ADMIN
Installation
- Homebrew : installation possible avec la commande
brew install snitch - Go :
go install github.com/karol-broda/snitch@latest - Nix/NixOS :
nix-env -iA nixpkgs.snitchou ajout possible comme entrée flake - Arch Linux (AUR) :
yay -S snitch-binouparu -S snitch-bin - Script shell : installation avec la commande
curl -sSL ... | sh, chemin par défaut~/.local/binou/usr/local/bin- Sur macOS, le script d’installation supprime automatiquement l’attribut de quarantaine
- Téléchargement du binaire : versions Linux (.tar.gz, .deb, .rpm, .apk) et macOS (.tar.gz) disponibles via GitHub Releases
Démarrage rapide
- L’exécution de
snitchlance le TUI interactif snitch -laffiche uniquement les sockets en écoute, etsnitch lsaffiche un tableau puis quittesnitch ls -t -eaffiche uniquement les sessions TCP connectées, etsnitch ls -pproduit une sortie simple et analysable
Commandes principales
snitch/snitch top: affiche une liste de connexions mise à jour en temps réel- Options :
-l(écoute),-t(TCP),-e(connecté),-i(intervalle de rafraîchissement) - Raccourcis clavier : déplacement
j/k, bascule TCP·UDP avect/u, arrêt d’un processus avecK, recherche avec/, quitter avecq, etc.
- Options :
snitch ls: affiche un tableau en une seule fois, avec utilisation automatique d’un pager si la sortie dépasse la hauteur du terminal- Formats de sortie : tableau par défaut,
-o json,-o csv,-p(simple),--no-headers(sans en-têtes)
- Formats de sortie : tableau par défaut,
snitch json: sortie au format JSON exploitable dans des scriptssnitch watch: diffuse des frames JSON à intervalles régulierssnitch upgrade: vérifie la version et effectue une mise à jour automatique
Options de filtre et de résolution
- Drapeaux communs :
-t(TCP),-u(UDP),-l(écoute),-e(connecté),-4(IPv4),-6(IPv6) - Résolution DNS et noms de services :
- Prise en charge des options
--resolve-addrs,--resolve-ports,--no-cache - Effectue des requêtes DNS en parallèle avec mise en cache, désactivable via
--no-cache
- Prise en charge des options
- Filtrage détaillé : spécification du nom de processus, port, état, etc. au format
key=value- Exemple :
snitch ls proto=tcp state=listen,snitch ls proc=nginx
- Exemple :
Formats de sortie
- Sortie tabulaire par défaut : nom du processus, PID, protocole, état, adresse locale et port
- Sortie simple (-p) : texte facile à parser
- Sortie JSON/CSV : utile pour l’automatisation par script et l’analyse de journaux
Configuration et variables d’environnement
- Fichier de configuration :
~/.config/snitch/snitch.toml- Réglages possibles :
numeric,dns_cache,theme(auto/dark/light/mono)
- Réglages possibles :
- Variables d’environnement :
- Prise en charge de
SNITCH_THEME,SNITCH_RESOLVE,SNITCH_DNS_CACHE,SNITCH_NO_COLOR,SNITCH_CONFIG, etc.
- Prise en charge de
Exigences système
- Nécessite un environnement Linux ou macOS
- Linux : lecture des données depuis
/proc/net/*, avec droits root ouCAP_NET_ADMINrequis pour les informations complètes sur les processus - macOS : utilisation des API système, avec
sudorequis pour les informations complètes sur les processus
1 commentaires
Avis Hacker News
ss affiche dans sa sortie par défaut des informations rarement utiles, comme la taille des files d’attente d’envoi/réception, mais n’indique pas à quelle application appartient le socket
En plus, il omet par défaut les sockets en écoute, alors que c’est justement l’un des usages principaux de ce type d’outil
Je sais qu’il est difficile de bien choisir les valeurs par défaut, mais ici c’est presque un cas d’école où tout a été mal choisi
Avec le temps, les utilisateurs et les cas d’usage changent, donc les valeurs par défaut devraient évoluer elles aussi, mais dans les outils Unix le format de sortie fait office d’API, donc le moindre changement crée des problèmes de rétrocompatibilité
Par exemple, si
ps auxtronque les noms de processus longs à environ 7 caractères, c’est pour cette raisonArticle lié : sh and the separation of data and representation
À mon avis, une utilisabilité intuitive compte bien plus que la vitesse ou les fonctionnalités
netstat -utanetss -utansemblent afficher presque les mêmes informationsComme le nom fait doublon, ce serait peut-être mieux d’en choisir un autre
Site officiel de Little Snitch
Snitch est simplement un outil qui présente de façon plus lisible dans le terminal les données de ss/netstat
Je ne comprends pas pourquoi reprendre exprès un nom si proche alors qu’il existe déjà un outil similaire dans le même domaine IT
Lien vers la démo
Les bibliothèques GUI ont diverses fonctionnalités pour des utilisateurs comme les personnes malvoyantes, alors que les TUI sont peut-être plus limitées sur ce point
La largeur d’écran devient trop importante, donc en écran partagé vertical sur un laptop ça tient à peine
Je ne compte pas installer Snitch. ss est déjà installé par défaut sur tous les serveurs, et je n’ai pas besoin d’une TUI
Snitch peut être bien pour un usage personnel ou sur workstation, mais sur serveur, ss reste la base
Snitch est plus adapté à une workstation ou à du debug sur homelab
Les files d’attente d’envoi/réception ne sont pas encore affichées, mais j’ai prévu de les ajouter plus tard avec un mode compact ou un bouton de bascule
Est-ce qu’il y a une fonctionnalité que j’aurais ratée dans la vidéo de démo ?
Une fonction de supervision du trafic est prévue, mais elle n’est pas encore implémentée
Je trouve étonnant que Go autorise
module barename. On finit de toute façon par utiliser une URL, même dans les projets personnels, et je pense que c’est une mauvaise pratiqueLien vers le commit
@latest, cela devrait fonctionnerPar exemple, si un malware attend un certain moment ou ne communique avec son C&C que pendant l’activité réseau de l’utilisateur, cela semble difficile à détecter
Les rootkits LD_PRELOAD peuvent manipuler la sortie des fonctions libc pour masquer leur activité
ss est un peu plus fiable sur ce point, et comme Snitch est écrit en Go et n’utilise pas libc, il a des chances d’être plus résistant aux rootkits LD_PRELOAD
Cela dit, ces outils ne sont pas conçus pour détecter du trafic malveillant, mais pour du debug local
Références : decloaker, article arXiv, article ACM, explication de la structure de proc
Un attaquant expérimenté peut de toute façon se fondre dans le trafic légitime
Même les outils réseau destinés à répondre à de vrais attaquants ne sont pas parfaits (mot-clé de recherche : bro vantage point problem)
Pour l’instant j’utilise jnettop, mais je n’aime pas son interface