7 puntos por GN⁺ 2025-12-25 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2025-12-25
Comentarios en Hacker News
  • Los valores predeterminados de lsof y ss son demasiado incómodos
    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
    • Totalmente de acuerdo. Las herramientas Unix tienen una limitación estructural para mantener valores predeterminados razonables a largo plazo
      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 aux recorta los nombres largos de procesos a unos 7 caracteres precisamente por eso
      Artículo relacionado: sh and the separation of data and representation
    • Ahora entendemos mucho mejor la UX. Da la impresión de que cuando los desarrolladores de los 70 crearon ss o lsof no tenían muy claro este tipo de problemas de usabilidad
    • Las nuevas herramientas CLI como fd, ag y rg también pasan por problemas parecidos
      Creo que la usabilidad intuitiva importa mucho más que la velocidad o las funciones
    • netstat -utan y ss -utan parecen mostrar casi la misma información
  • Cuando vi el título, al principio pensé que hablaban de Little Snitch, la herramienta de monitoreo de red para Mac
    Como el nombre se superpone, quizá sería mejor usar otro
    Sitio oficial de Little Snitch
    • También existe OpenSnitch, un clon para Linux
    • A mí me parece bien el nombre. No creo que haga falta cambiarlo solo porque ya exista Little Snitch
    • No creo que sea necesario cambiar el nombre. El propósito es completamente distinto al de Little Snitch
      Snitch es simplemente una herramienta para mostrar los datos de ss/netstat de forma más agradable en la terminal
    • Vaya, qué bien. Me pregunto si habrá también alguna alternativa para Windows o Linux
    • Yo también pensé eso al principio. El nombre me parece demasiado vergonzoso
      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
  • El enfoque de recording-as-code en la demo es interesante
    Enlace a la demo
    • ¡Gracias! :) Casi no he visto este enfoque en otros proyectos
  • Me encanta que últimamente estén apareciendo más herramientas basadas en TUI. Este proyecto también se ve genial, así que pienso probarlo sí o sí
    • Pero me pregunto si un TUI tendrá una accesibilidad comparable a la de una GUI
      Las bibliotecas GUI suelen tener varias funciones para usuarios con discapacidad visual y otros perfiles, mientras que en TUI eso podría quedarse corto
  • Ya estoy acostumbrado a ss y lo uso bien. Solo que no quiero ver los números de la cola de envío y recepción
    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
    • Exacto. En servidores ss ya viene instalado por defecto, así que basta con usar eso
      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
  • Se ve bien, pero yo llevo mucho tiempo usando iptraf-ng y todavía siento que es un poco mejor
    ¿Habrá alguna función que no noté en el video demo?
    • ¡Gracias! Snitch se parece más a un reemplazo de ss/netstat que a una herramienta de monitoreo de tráfico
      Las funciones de monitoreo de tráfico están planeadas, pero todavía no se han implementado
  • No me gusta el nombre, pero monitorear el estado de las conexiones en TUI sí que le queda muy bien
    • Gracias. Me da curiosidad qué parte del nombre no te convence
  • Intenté instalarlo con Go, pero apareció este error
    go install github.com/karol-broda/snitch@latest
    go: github.com/karol-broda/snitch@latest: version constraints conflict:
    module declares its path as: snitch
    but was required as: github.com/karol-broda/snitch
    
    • Fue un problema causado porque la declaración del módulo usaba solo el nombre, sin URL. Se corrigió hace unas horas
      Me sorprende que Go permita module barename. En proyectos personales igual uno termina usando una URL, y me parece un patrón poco recomendable
    • Ya está corregido, pero todavía no se refleja en la release
      Enlace al commit
    • Ya lo corregí y también publiqué la release. Si lo compilas con @latest, debería funcionar bien
  • Siempre me he preguntado qué tan útiles serán este tipo de herramientas para un atacante experimentado
    Por 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
    • Como mínimo, es mejor que estas herramientas no hagan parseo directo de /proc
      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
    • Exacto. Snitch no es para detección de seguridad sino para depuración/inspección local
      Un atacante experimentado de todos modos puede operar mezclándose con el tráfico legítimo
    • Este tipo de herramientas no está pensado para entornos adversarios
      Incluso las herramientas de red para responder a atacantes reales no son perfectas (palabras clave de búsqueda: bro vantage point problem)
  • Estaría bueno que hubiera una función para mostrar la velocidad de transferencia actual y acumulada por socket/proceso
    Por ahora uso jnettop, pero no me gusta su UI
    • Esa función está prevista para una versión futura