- 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
Comentários do Hacker News
lsofe dosssão muito inconvenientesO
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 pertenceAlé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
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 auxtruncar nomes longos de processos para algo como 7 caracteres vem daíTexto relacionado: sh and the separation of data and representation
ssou olsof, parece que não entendiam tão bem esses problemas de usabilidadefd,agerg, passam por problemas parecidosAcho que usabilidade intuitiva é muito mais importante do que velocidade ou recursos
netstat -utaness -utanparecem mostrar quase as mesmas informaçõesComo os nomes coincidem, talvez fosse melhor usar outro nome
Site oficial do Little Snitch
O Snitch é só uma ferramenta para mostrar dados de
ss/netstatno terminal de um jeito mais legívelJá existe uma ferramenta com nome parecido na mesma área de TI, então não entendo por que usar isso de novo
Link da demo
Bibliotecas de GUI têm vários recursos para usuários com deficiência visual e outros, e TUI talvez fique devendo nisso
sse uso bem. Só não quero ver os números das filas de envio e recebimentoA 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
ssjá vem instalado por padrão em todos os servidores, e não preciso de TUIO Snitch pode ser bom para uso pessoal ou em workstation, mas em servidor o padrão é o
ssssjá vem instalado por padrão, dá para continuar usando eleO 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
Será que tem algum recurso que deixei passar no vídeo de demonstração?
ss/netstatdo que uma ferramenta de monitoramento de tráfegoO recurso de monitoramento de tráfego está nos planos, mas ainda não foi implementado
É curioso que Go permita
module barename. Em projetos pessoais no fim a gente acaba usando URL, e acho que isso é um padrão ruimLink do commit
@latest, deve funcionar bemPor 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
/procRootkits com
LD_PRELOADmanipulam a saída de funções da libc para esconder atividadeO
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 comLD_PRELOADAinda 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
Um atacante experiente de qualquer forma pode operar misturado ao tráfego legítimo
Mesmo ferramentas de rede voltadas a responder a atacantes não são perfeitas (pesquise por: bro vantage point problem)
Hoje uso o
jnettop, mas não gosto da interface