- Snitch es una herramienta para inspeccionar conexiones de red más fácil de leer que
ss o netstat, con soporte para una UI de terminal (TUI) y tablas con estilo
- Muestra el estado de las conexiones en una pantalla interactiva en tiempo real o en formato de tabla de una sola salida, y ofrece varios filtros como TCP/UDP, en escucha y conectado
- Incluye funciones de salida JSON y CSV, resolución de DNS/nombres de servicio, supervisión y finalización de procesos y actualización automática
- Soporta varios métodos de instalación como Homebrew, Go, Nix, Arch Linux, script de shell y binarios, e incluye la función de eliminar automáticamente la advertencia de Gatekeeper en macOS
- Es una herramienta útil para que desarrolladores y administradores de sistemas monitoreen conexiones de red de forma intuitiva y la usen en automatización con scripts
Descripción general
- Snitch es una herramienta diseñada como reemplazo de
ss o netstat para explorar visualmente las conexiones de red
- Muestra el estado de las conexiones mediante una interfaz TUI o una salida en tabla con estilo
- Funciona en Linux y macOS, y puede requerir privilegios de root o permisos CAP_NET_ADMIN
Métodos de instalación
- Homebrew: se puede instalar con el comando
brew install snitch
- Go:
go install github.com/karol-broda/snitch@latest
- Nix/NixOS: puede agregarse con
nix-env -iA nixpkgs.snitch o como entrada flake
- Arch Linux (AUR):
yay -S snitch-bin o paru -S snitch-bin
- Script de shell: instalación con el comando
curl -sSL ... | sh; la ruta predeterminada es ~/.local/bin o /usr/local/bin
- En macOS, el script de instalación elimina automáticamente el atributo de cuarentena
- Descarga de binarios: en GitHub Releases hay versiones para Linux (.tar.gz, .deb, .rpm, .apk) y macOS (.tar.gz)
Inicio rápido
- Al ejecutar
snitch, se inicia la TUI interactiva
snitch -l muestra solo sockets en escucha, y snitch ls imprime en formato de tabla y termina
snitch ls -t -e muestra solo sesiones TCP conectadas, y snitch ls -p produce una salida simple y fácil de parsear
Comandos principales
snitch / snitch top: muestra una lista de conexiones con actualización en tiempo real
- Opciones:
-l (escucha), -t (TCP), -e (conectado), -i (intervalo de actualización)
- Atajos de teclado: mover con
j/k, cambiar TCP·UDP con t/u, finalizar proceso con K, buscar con /, salir con q, etc.
snitch ls: imprime una tabla de una sola vez; si supera la altura del terminal, usa automáticamente un pager
- Formatos de salida: tabla predeterminada,
-o json, -o csv, -p (simple), --no-headers (sin encabezados)
snitch json: salida en formato JSON para uso en scripts
snitch watch: transmite frames JSON a intervalos regulares
snitch upgrade: comprueba la versión y actualiza automáticamente
Opciones de filtrado y resolución
- Flags comunes:
-t (TCP), -u (UDP), -l (escucha), -e (conectado), -4 (IPv4), -6 (IPv6)
- Resolución de DNS y nombres de servicio:
- Soporta las opciones
--resolve-addrs, --resolve-ports, --no-cache
- Realiza consultas DNS en paralelo y usa caché; esta puede desactivarse con
--no-cache
- Filtrado detallado: permite especificar nombre de proceso, puerto, estado, etc., en formato
key=value
- Ej.:
snitch ls proto=tcp state=listen, snitch ls proc=nginx
Formatos de salida
- Salida de tabla predeterminada: muestra nombre del proceso, PID, protocolo, estado, dirección local y puerto
- Salida simple (-p): texto fácil de parsear
- Salida JSON/CSV: útil para automatización con scripts y análisis de logs
Configuración y variables de entorno
- Archivo de configuración:
~/.config/snitch/snitch.toml
- Se pueden configurar
numeric, dns_cache, theme (auto/dark/light/mono)
- Variables de entorno:
- Soporta
SNITCH_THEME, SNITCH_RESOLVE, SNITCH_DNS_CACHE, SNITCH_NO_COLOR, SNITCH_CONFIG, etc.
Requisitos del sistema
- Requiere un entorno Linux o macOS
- Linux: lee datos desde
/proc/net/*; para acceder a toda la información de procesos se requieren permisos de root o CAP_NET_ADMIN
- macOS: usa APIs del sistema; para acceder a toda la información de procesos se requiere
sudo
1 comentarios
Comentarios en Hacker News
ss muestra en su salida predeterminada información que rara vez se necesita, como el tamaño de las colas de envío y recepción, pero no muestra a qué aplicación pertenece el socket
Además, omite por defecto los sockets en escucha, cuando justamente ese es uno de los usos principales de este tipo de herramientas
Entiendo que elegir buenos valores predeterminados es difícil, pero este es un caso en el que casi todo se eligió mal
Con el tiempo cambian los usuarios y los casos de uso, así que los valores predeterminados también deberían cambiar, pero en las herramientas Unix el formato de salida también funciona como API, así que si lo cambias surgen problemas de compatibilidad hacia atrás
Por ejemplo,
ps auxrecorta los nombres largos de procesos a unos 7 caracteres precisamente por esoArtículo relacionado: sh and the separation of data and representation
Creo que la usabilidad intuitiva importa mucho más que la velocidad o las funciones
netstat -utanyss -utanparecen mostrar casi la misma informaciónComo el nombre se superpone, quizá sería mejor usar otro
Sitio oficial de Little Snitch
Snitch es simplemente una herramienta para mostrar los datos de ss/netstat de forma más agradable en la terminal
Ya existe una herramienta con un nombre parecido dentro del mismo ámbito de TI, así que no entiendo por qué usarlo otra vez a propósito
Enlace a la demo
Las bibliotecas GUI suelen tener varias funciones para usuarios con discapacidad visual y otros perfiles, mientras que en TUI eso podría quedarse corto
La pantalla se vuelve demasiado ancha y en una división vertical en una laptop casi no cabe
No creo que vaya a instalar Snitch. ss ya viene instalado por defecto en todos los servidores, y no necesito un TUI
Snitch puede estar bien para uso personal o en estaciones de trabajo, pero en servidores lo normal es usar ss
Snitch encaja mejor en estaciones de trabajo o para depuración en homelab
Todavía no muestra las colas de envío y recepción, pero más adelante planeo agregarlas con un modo compacto o un toggle
¿Habrá alguna función que no noté en el video demo?
Las funciones de monitoreo de tráfico están planeadas, pero todavía no se han implementado
Me sorprende que Go permita
module barename. En proyectos personales igual uno termina usando una URL, y me parece un patrón poco recomendableEnlace al commit
@latest, debería funcionar bienPor ejemplo, si un malware está diseñado para esperar cierto tiempo o comunicarse con su C&C solo cuando el usuario está haciendo actividad de red, parece que sería difícil detectarlo
Los rootkits con LD_PRELOAD manipulan la salida de funciones de libc para ocultar su actividad
ss es un poco más confiable en ese sentido, y como Snitch está escrito en Go y no usa libc, podría ser más resistente a rootkits con LD_PRELOAD
Aun así, estas herramientas no son para detectar tráfico malicioso sino para depuración local
Material de referencia: decloaker, artículo en arXiv, artículo en ACM, explicación de la estructura de proc
Un atacante experimentado de todos modos puede operar mezclándose con el tráfico legítimo
Incluso las herramientas de red para responder a atacantes reales no son perfectas (palabras clave de búsqueda: bro vantage point problem)
Por ahora uso jnettop, pero no me gusta su UI