Aller au contenu principal

Snitch

Overview

Snitch, c'est l'outil moderne et élégant pour inspecter les connexions réseau, offrant une interface TUI (Terminal User Interface) interactive avec mise à jour en temps réel. Snitch permet de visualiser les connexions réseau actives, filtrer par protocole (TCP/UDP), état (LISTEN, ESTABLISHED), et afficher des informations détaillées sur les processus, PID, adresses et ports. Il remplace efficacement les outils traditionnels comme netstat et ss avec une interface plus moderne et des fonctionnalités avancées.

Snitch se distingue par son interface TUI interactive, son affichage en temps réel, ses filtres avancés, sa résolution DNS et de noms de services, et ses formats de sortie multiples (table, JSON, CSV). Il est particulièrement adapté au diagnostic réseau, à l'inspection de connexions, et au monitoring réseau en temps réel.


Informations essentielles

PropriétéValeur
Site officielhttps://github.com/karol-broda/snitch
LicenceMIT
NationalitéInternational
DéploiementInstallation binaire, package manager, Docker
DifficultéFacile
TechnologiesGo

TL;DR

Snitch est idéal pour inspecter les connexions réseau avec interface TUI interactive, affichage en temps réel, filtres avancés, et sortie JSON/CSV pour scripting.

Points clés à retenir :

  • Interface TUI interactive moderne
  • Affichage en temps réel des connexions
  • Filtres avancés (protocole, état, IPv4/IPv6)
  • Résolution DNS et noms de services
  • Sortie multiple (table, JSON, CSV)
  • Monitoring de processus
  • Support Linux et macOS
  • Installation simple (binaire, packages, Docker)

Compatibilité et intégrations

  • Plateformes : Linux, macOS
  • Formats de sortie : Table formatée, JSON, CSV, plain text
  • Résolution : DNS (adresses IP), noms de services (ports)
  • Filtres : TCP/UDP, LISTEN/ESTABLISHED, IPv4/IPv6
  • Monitoring : Surveillance de processus spécifiques
  • Docker : Images OCI disponibles (Alpine, Debian, Ubuntu, Scratch)

Avantages

  • Interface TUI moderne : Interface interactive avec navigation au clavier
  • Temps réel : Mise à jour en temps réel des connexions
  • Filtres avancés : Filtrage par protocole, état, adresse, port, processus
  • Résolution intelligente : DNS et noms de services avec cache
  • Sortie flexible : Table formatée, JSON, CSV, plain text
  • Monitoring : Surveillance et kill de processus
  • Performance : Résolution DNS parallèle et cache pour performance
  • Thèmes : Support de multiples thèmes (auto, dark, light, mono)
  • Configuration : Fichier de configuration TOML
  • Mémoire d'état : Sauvegarde des préférences entre sessions
  • Cross-platform : Linux et macOS

Limites

  • Linux et macOS uniquement (pas Windows)
  • Nécessite privilèges root ou CAP_NET_ADMIN pour informations complètes processus
  • Communauté plus petite que outils établis (netstat, ss)
  • Nécessite Go pour compilation depuis source

Fonctionnalités principales

Interface TUI interactive

  • Affichage temps réel : Liste de connexions mise à jour en temps réel
  • Navigation clavier : Navigation avec j/k, flèches, recherche
  • Filtres interactifs : Toggle TCP/UDP, LISTEN/ESTABLISHED/OTHER
  • Tri : Tri par différents champs avec inversion
  • Monitoring : Surveillance de processus spécifiques (highlight)
  • Détails : Affichage détaillé des connexions
  • Kill : Arrêt de processus avec confirmation

Filtres et recherche

  • Protocoles : Filtrage TCP ou UDP
  • États : LISTEN, ESTABLISHED, OTHER
  • IP : IPv4 ou IPv6
  • Recherche : Recherche dans les connexions
  • Filtres avancés : Syntaxe key=value pour filtrage précis

Résolution

  • DNS : Résolution d'adresses IP vers hostnames
  • Services : Résolution de ports vers noms de services
  • Cache DNS : Cache pour performance améliorée
  • Parallélisme : Résolution DNS parallèle

Formats de sortie

  • Table formatée : Table stylée avec bordures (défaut)
  • Plain text : Sortie parsable sans formatage
  • JSON : Sortie JSON pour scripting
  • CSV : Sortie CSV pour analyse
  • Pager : Utilisation automatique d'un pager si nécessaire

Configuration

  • Fichier config : ~/.config/snitch/snitch.toml
  • Thèmes : Auto, dark, light, mono, et thèmes personnalisés
  • Mémoire d'état : Sauvegarde des préférences entre sessions
  • Variables d'environnement : Configuration via variables d'environnement

Déploiement

Installation automatique (script)

curl -sSL https://raw.githubusercontent.com/karol-broda/snitch/master/install.sh | sh

Arch Linux (AUR)

# avec yay
yay -S snitch-bin

# avec paru
paru -S snitch-bin

Homebrew (macOS)

brew install snitch

Docker

# Alpine (défaut, ~17MB)
docker pull ghcr.io/karol-broda/snitch:latest.

# Scratch (minimal, ~9MB)
docker pull ghcr.io/karol-broda/snitch:latest-scratch.

# Debian
docker pull ghcr.io/karol-broda/snitch:latest-debian.

# Ubuntu
docker pull ghcr.io/karol-broda/snitch:latest-ubuntu

Exécution Docker :

# Basique - voit les sockets mais pas les noms de processus
docker run --rm --net=host snitch:latest ls.

# Complet - inclut PID, nom de processus, utilisateur
docker run --rm --net=host --pid=host --cap-add=SYS_PTRACE snitch:latest ls

Binaire

Télécharger depuis les releases GitHub et extraire :

tar xzf snitch_*.tar.gz.
sudo mv snitch /usr/local/bin/

Utilisation

Interface TUI interactive

snitch # TUI avec toutes les connexions
snitch -l # TUI avec seulement les sockets en écoute
snitch -t # TCP uniquement
snitch -e # Connexions établies uniquement
snitch -i 2s # Intervalle de rafraîchissement de 2 secondes

Raccourcis clavier :

  • j/k, ↑/↓ : Navigation
  • g/G : Haut/bas de la liste
  • t/u : Toggle TCP/UDP
  • l/e/o : Toggle LISTEN/ESTABLISHED/OTHER
  • s/S : Cycle de tri / inversion
  • w : Surveiller/monitorer processus (highlight)
  • W : Effacer toutes les surveillances
  • K : Tuer processus (avec confirmation)
  • / : Recherche
  • enter : Détails de connexion
  • ? : Aide
  • q : Quitter

Commande ls (one-shot)

snitch ls # Table formatée (défaut)
snitch ls -l # Sockets en écoute uniquement
snitch ls -t -l # TCP en écoute
snitch ls -e # Connexions établies uniquement
snitch ls -p # Sortie plain/parsable
snitch ls -o json # Sortie JSON
snitch ls -o csv # Sortie CSV
snitch ls -n # Numérique (pas de résolution DNS)
snitch ls --no-headers # Sans en-têtes

Filtres avancés

snitch ls proto=tcp state=listen
snitch ls pid=1234
snitch ls proc=nginx
snitch ls lport=443
snitch ls contains=google

JSON et streaming

# Sortie JSON
snitch json
snitch json -l

# Streaming JSON
snitch watch -i 1s | jq '.count'
snitch watch -l -i 500ms

Mise à jour

snitch upgrade # Vérifier les mises à jour
snitch upgrade --yes # Mise à jour automatique
snitch upgrade -v 0.1.7 # Installer une version spécifique

Configuration

Fichier de configuration

Créer ~/.config/snitch/snitch.toml :

[defaults]
numeric = false # Désactiver résolution de noms.
dns_cache = true # Cache DNS (false pour désactiver)
theme = "auto" # Thème: auto, dark, light, mono.

[tui]
remember_state = false # Mémoriser options de vue entre sessions

Variables d'environnement

SNITCH_THEME=dark # Définir thème par défaut.
SNITCH_RESOLVE=0 # Désactiver résolution DNS.
SNITCH_DNS_CACHE=0 # Désactiver cache DNS.
SNITCH_NO_COLOR=1 # Désactiver couleurs.
SNITCH_CONFIG=/path/to # Chemin personnalisé pour config

Cas d'usage

  • Diagnostic réseau : Inspection rapide des connexions réseau
  • Troubleshooting : Identification de processus utilisant des ports
  • Monitoring : Surveillance en temps réel des connexions
  • Scripting : Sortie JSON/CSV pour automatisation
  • Sécurité : Identification de connexions suspectes
  • Performance : Analyse de l'utilisation réseau par processus

Exemple de sortie

Table formatée :

 ╭─────────────────┬───────┬───────┬─────────────┬─────────────────┬────────╮
│ PROCESS │ PID │ PROTO │ STATE │ LADDR │ LPORT │
├─────────────────┼───────┼───────┼─────────────┼─────────────────┼────────┤
│ nginx │ 1234 │ tcp │ LISTEN │ * │ 80 │
│ postgres │ 5678 │ tcp │ LISTEN │ 127.0.0.1 │ 5432 │
╰─────────────────┴───────┴───────┴─────────────┴─────────────────┴────────╯
2 connections

Plain text :

PROCESS PID PROTO STATE LADDR LPORT.
nginx 1234 tcp LISTEN * 80
postgres 5678 tcp LISTEN 127.0.0.1 5432

Ressources