Snitch – una herramienta ss/netstat más amigable
(github.com/karol-broda)- Snitch es una herramienta para inspeccionar conexiones de red más fácil de leer que
ssonetstat, 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
ssonetstatpara 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.snitcho como entrada flake - Arch Linux (AUR):
yay -S snitch-binoparu -S snitch-bin - Script de shell: instalación con el comando
curl -sSL ... | sh; la ruta predeterminada es~/.local/bino/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 -lmuestra solo sockets en escucha, ysnitch lsimprime en formato de tabla y terminasnitch ls -t -emuestra solo sesiones TCP conectadas, ysnitch ls -pproduce 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 cont/u, finalizar proceso conK, buscar con/, salir conq, etc.
- Opciones:
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)
- Formatos de salida: tabla predeterminada,
snitch json: salida en formato JSON para uso en scriptssnitch watch: transmite frames JSON a intervalos regularessnitch 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
- Soporta las opciones
- 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
- Ej.:
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)
- Se pueden configurar
- Variables de entorno:
- Soporta
SNITCH_THEME,SNITCH_RESOLVE,SNITCH_DNS_CACHE,SNITCH_NO_COLOR,SNITCH_CONFIG, etc.
- Soporta
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 oCAP_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