7 pontos por GN⁺ 2025-12-25 | 1 comentários | Compartilhar no WhatsApp
  • Snitch é uma ferramenta de inspeção de conexões de rede mais fácil de ler por humanos do que ss ou netstat, com suporte a interface de terminal (TUI) e tabelas estilizadas
  • Exibe o estado das conexões em uma tela interativa em tempo real ou em formato de tabela com saída única, oferecendo vários filtros como TCP/UDP, escuta e conectado
  • Inclui recursos como saída em JSON·CSV, resolução de DNS/nomes de serviço, monitoramento e encerramento de processos e atualização automática
  • Suporta vários métodos de instalação, como Homebrew, Go, Nix, Arch Linux, Shell Script e binário, e inclui no macOS a remoção automática do aviso do Gatekeeper
  • Uma ferramenta útil para desenvolvedores e administradores de sistemas monitorarem conexões de rede de forma intuitiva e aproveitarem em automações por script

Visão geral

  • Snitch é uma ferramenta para explorar visualmente conexões de rede, projetada como alternativa a ss ou netstat
  • Mostra o estado das conexões por meio de uma interface TUI ou de saída em tabela estilizada
  • Funciona em Linux e macOS, podendo exigir privilégios de root ou permissão CAP_NET_ADMIN

Como instalar

  • Homebrew: pode ser instalado com o comando brew install snitch
  • Go: go install github.com/karol-broda/snitch@latest
  • Nix/NixOS: nix-env -iA nixpkgs.snitch ou adição via entrada flake
  • Arch Linux (AUR): yay -S snitch-bin ou paru -S snitch-bin
  • Shell Script: instalação com o comando curl -sSL ... | sh, com caminho padrão em ~/.local/bin ou /usr/local/bin
    • No macOS, o script de instalação remove automaticamente o atributo de quarentena
  • Download do binário: versões para Linux (.tar.gz, .deb, .rpm, .apk) e macOS (.tar.gz) disponíveis no GitHub Releases

Início rápido

  • Ao executar snitch, a TUI interativa é iniciada
  • snitch -l mostra apenas sockets em escuta, e snitch ls exibe em formato de tabela e encerra
  • snitch ls -t -e mostra apenas sessões TCP conectadas, e snitch ls -p produz saída simples parseável

Principais comandos

  • snitch / snitch top: exibe uma lista de conexões atualizada em tempo real
    • Opções: -l (escuta), -t (TCP), -e (conectado), -i (intervalo de atualização)
    • Atalhos de teclado: mover com j/k, alternar TCP·UDP com t/u, encerrar processo com K, buscar com /, sair com q etc.
  • snitch ls: imprime uma tabela de uma vez; se ultrapassar a altura do terminal, usa automaticamente um pager
    • Formatos de saída: tabela padrão, -o json, -o csv, -p (simples), --no-headers (remove cabeçalhos)
  • snitch json: saída em formato JSON para uso em scripts
  • snitch watch: transmite frames JSON em intervalos regulares
  • snitch upgrade: verifica a versão e faz atualização automática

Filtros e opções de resolução

  • Flags comuns: -t (TCP), -u (UDP), -l (escuta), -e (conectado), -4 (IPv4), -6 (IPv6)
  • Resolução de DNS e nomes de serviço:
    • Suporte às opções --resolve-addrs, --resolve-ports, --no-cache
    • Executa consultas DNS paralelas e cacheamento, com possibilidade de desativar o cache via --no-cache
  • Filtragem detalhada: permite definir nome do processo, porta, estado etc. no formato key=value
    • Ex.: snitch ls proto=tcp state=listen, snitch ls proc=nginx

Formatos de saída

  • Saída padrão em tabela: mostra nome do processo, PID, protocolo, estado, endereço local e porta
  • Saída simples (-p): texto em formato parseável
  • Saída JSON/CSV: útil para automação por script e análise de logs

Configuração e variáveis de ambiente

  • Arquivo de configuração: ~/.config/snitch/snitch.toml
    • Permite configurar numeric, dns_cache, theme (auto/dark/light/mono)
  • Variáveis de ambiente:
    • Suporte a SNITCH_THEME, SNITCH_RESOLVE, SNITCH_DNS_CACHE, SNITCH_NO_COLOR, SNITCH_CONFIG etc.

Requisitos do sistema

  • Requer ambiente Linux ou macOS
  • Linux: lê dados de /proc/net/*; para informações completas de processos, é preciso root ou a permissão CAP_NET_ADMIN
  • macOS: usa APIs do sistema; para informações completas de processos, requer sudo

1 comentários

 
GN⁺ 2025-12-25
Comentários do Hacker News
  • As configurações padrão do lsof e do ss são muito inconvenientes
    O ss, na saída padrão, mostra informações raramente necessárias, como o tamanho das filas de envio e recebimento, mas não mostra a qual aplicação o socket pertence
    Além disso, por padrão ele omite sockets em escuta, sendo que esse é justamente um dos principais usos desse tipo de ferramenta
    Sei que escolher bons padrões é difícil, mas este é praticamente um caso de ter errado em quase tudo
    • Concordo totalmente. Ferramentas Unix têm uma limitação estrutural que dificulta manter padrões sensatos no longo prazo
      Com o tempo, usuários e casos de uso mudam, então os padrões também deveriam mudar, mas em ferramentas Unix o formato de saída acaba virando API, e mudar isso causa problemas de retrocompatibilidade
      Por exemplo, o fato de ps aux truncar nomes longos de processos para algo como 7 caracteres vem daí
      Texto relacionado: sh and the separation of data and representation
    • Hoje em dia o entendimento sobre UX é muito mais profundo. Quando os desenvolvedores dos anos 70 criaram o ss ou o lsof, parece que não entendiam tão bem esses problemas de usabilidade
    • As novas gerações de ferramentas CLI, como fd, ag e rg, passam por problemas parecidos
      Acho que usabilidade intuitiva é muito mais importante do que velocidade ou recursos
    • netstat -utan e ss -utan parecem mostrar quase as mesmas informações
  • Quando vi o título, no começo achei que era sobre o Little Snitch, a ferramenta de monitoramento de rede para Mac
    Como os nomes coincidem, talvez fosse melhor usar outro nome
    Site oficial do Little Snitch
    • Também existe o OpenSnitch, um clone para Linux
    • Acho o nome bom. Só porque já existe o Little Snitch não quer dizer que precisa mudar
    • Não acho que seja necessário mudar o nome. O propósito é completamente diferente do Little Snitch
      O Snitch é só uma ferramenta para mostrar dados de ss/netstat no terminal de um jeito mais legível
    • Uau, legal. Fiquei curioso se existe alguma alternativa para Windows ou Linux
    • Também pensei isso no começo. O nome parece constrangedor demais
      Já existe uma ferramenta com nome parecido na mesma área de TI, então não entendo por que usar isso de novo
  • O estilo de recording-as-code da demonstração é interessante
    Link da demo
    • Valeu :) Quase não vi essa abordagem em outros projetos
  • Estou gostando muito de ver o aumento das ferramentas baseadas em TUI hoje em dia. Este projeto também parece ótimo, então com certeza pretendo testar
    • Mas será que TUI tem acessibilidade tão boa quanto GUI?
      Bibliotecas de GUI têm vários recursos para usuários com deficiência visual e outros, e TUI talvez fique devendo nisso
  • Já me acostumei com o ss e uso bem. Só não quero ver os números das filas de envio e recebimento
    A largura da tela fica grande demais, então em divisão vertical no notebook quase não cabe
    Não pretendo instalar o Snitch. O ss já vem instalado por padrão em todos os servidores, e não preciso de TUI
    O Snitch pode ser bom para uso pessoal ou em workstation, mas em servidor o padrão é o ss
    • Isso mesmo. Em servidor, como o ss já vem instalado por padrão, dá para continuar usando ele
      O Snitch é mais adequado para workstation ou para debug em homelab
      Ele ainda não mostra as filas de envio e recebimento, mas pretendo adicionar isso depois com um modo compacto ou um alternador
  • Parece bom, mas eu uso iptraf-ng há muito tempo e ainda acho ele um pouco melhor
    Será que tem algum recurso que deixei passar no vídeo de demonstração?
    • Valeu! O Snitch está mais para um substituto de ss/netstat do que uma ferramenta de monitoramento de tráfego
      O recurso de monitoramento de tráfego está nos planos, mas ainda não foi implementado
  • Não gostei do nome, mas monitorar estados de conexão em TUI combina muito bem
    • Valeu. Fiquei curioso sobre qual parte do nome você não gostou
  • Tentei instalar com Go, mas ocorreu o erro abaixo
    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
    
    • O problema aconteceu porque o módulo foi declarado só com o nome, sem URL. Isso foi corrigido há algumas horas
      É curioso que Go permita module barename. Em projetos pessoais no fim a gente acaba usando URL, e acho que isso é um padrão ruim
    • Já foi corrigido, mas ainda não entrou em uma release
      Link do commit
    • Agora já corrigi e também fiz a release. Se você compilar com @latest, deve funcionar bem
  • Sempre fiquei curioso sobre o quanto essas ferramentas seriam úteis para atacantes experientes
    Por exemplo, se um malware for projetado para esperar certo tempo ou só se comunicar com o C&C quando o usuário estiver gerando atividade de rede, parece que a detecção ficaria difícil
    • Pelo menos é melhor que essas ferramentas não façam parsing direto de /proc
      Rootkits com LD_PRELOAD manipulam a saída de funções da libc para esconder atividade
      O ss é um pouco mais confiável nesse sentido, e o Snitch, por ter sido escrito em Go, não usa libc, então pode ser mais resistente a rootkits com LD_PRELOAD
      Ainda assim, essas ferramentas não são para detectar tráfego malicioso, e sim para depuração local
      Referências: decloaker, artigo no arXiv, artigo na ACM, explicação da estrutura do proc
    • Exato. O Snitch não é para detecção de segurança, e sim para depuração/inspeção local
      Um atacante experiente de qualquer forma pode operar misturado ao tráfego legítimo
    • Essas ferramentas não são para ambientes adversariais
      Mesmo ferramentas de rede voltadas a responder a atacantes não são perfeitas (pesquise por: bro vantage point problem)
  • Seria bom ter um recurso para mostrar a taxa de transferência atual e acumulada de cada socket/processo
    Hoje uso o jnettop, mas não gosto da interface
    • Esse recurso está planejado para uma versão futura