Voltar às atualizações
New releaseAug 21, 2026

rustnet v1.6.0

Monitorização de rede por processo para o seu terminal com inspeção profunda de pacotes. Multiplataforma, em sandbox.

Compartilhar

RustNet

Monitoramento de rede por processo para o seu terminal: conexões TCP, UDP e QUIC ao vivo com inspeção profunda de pacotes, com sandbox por padrão.

Built With Ratatui Build Status Crates.io GitHub Stars License GitHub release Docker Image

Português | 简体中文 | 日本語

Demonstração do RustNet

Visibilidade em tempo real de cada conexão que sua máquina faz, quem a possui e qual protocolo está falando. Sem tcpdump, encaminhamento X11 ou piping como root.

Recursos

  • Atribuição por processo: Cada conexão TCP, UDP e QUIC mapeada para o processo proprietário, via eBPF no Linux, PKTAP no macOS, ETW com fallback automático para IP Helper no Windows e APIs nativas no FreeBSD. Os detalhes incluem PID, executável, nomes de usuário/grupo, confiança de correspondência e uma cadeia limitada de processos pai em todas as plataformas. Wireshark e tcpdump não conseguem fazer isso; netstat / ss não conseguem mostrar o estado ao vivo.
  • Inspeção profunda de pacotes: Identifica HTTP, HTTPS/TLS com SNI, DNS, SSH, FTP, QUIC, MQTT, BitTorrent, STUN, NTP, mDNS, LLMNR, DHCP, SNMP, SSDP e NetBIOS, sem dissectores externos.
  • Exportação PCAPNG anotada: --pcapng-export grava uma captura pronta para o Wireshark com processo, PID, direção, DPI/SNI e GeoIP embutidos como comentários por pacote. Abra no Wireshark e cada pacote já nomeia seu processo proprietário, sem pós-processamento. O clássico --pcap-export com um sidecar JSONL para correlação offline também está disponível.
  • Sandbox de segurança: Landlock (Linux 5.13+), Seatbelt (macOS), redução de privilégios por token + bloqueio de processos filhos por job object (Windows). Reduz privilégios imediatamente após a inicialização do libpcap. Consulte SECURITY.md.
  • Análises de rede: Tempos de ida e volta em tempo real para TCP, handshakes QUIC, respostas DNS e echo ICMP, além de detecção de retransmissão TCP, fora de ordem e retransmissão rápida.
  • Ciclo de vida inteligente de conexões: Timeouts cientes do protocolo com indicadores de obsolescência branco → amarelo → vermelho. Alterne com t para manter conexões históricas (fechadas) visíveis para perícia.
  • Filtragem estilo Vim/fzf: port:, src:, dst:, sni:, process:, state:, proto:, além de regex via /(?i)pattern/.
  • Enriquecimento GeoIP: Consultas de país via MaxMind GeoLite2 local. Sem chamadas de rede.
  • Identificação de dispositivos na LAN: Endereço MAC e fabricante (do banco de dados IEEE OUI embutido) para peers no link e o gateway, aprendidos passivamente a partir do tráfego ARP e exibidos no painel de detalhes.
  • Atribuição Kubernetes (recurso kubernetes opcional): conexões mapeadas para seu pod, namespace e contêiner, exibidas no painel de detalhes, nas exportações JSON/PCAPNG e nos filtros pod:, ns:, container:. Habilitado na imagem Docker oficial; em um cluster, use o plugin kubectl-rustnet para executá-lo como um pod de depuração efêmero. Consulte USAGE.md.
  • Multiplataforma: Linux, macOS, Windows, FreeBSD.

Por que RustNet?

O RustNet preenche a lacuna entre ferramentas simples de conexão (netstat, ss) e analisadores de pacotes (Wireshark, tcpdump):

  • Atribuição de processos: Veja a qual aplicativo pertence cada conexão. O Wireshark não consegue fornecer isso porque ele só vê pacotes, não sockets.
  • Visão centrada na conexão: Acompanhe estados, largura de banda e protocolos por conexão em tempo real
  • Compatível com SSH: A TUI funciona via SSH para que você veja rapidamente o que está acontecendo em um servidor remoto sem encaminhar X11 ou capturar tráfego

O RustNet complementa as ferramentas de captura de pacotes. Use o RustNet para ver o que está fazendo conexões. Para inspeção direta no Wireshark, --pcapng-export grava, ao vivo e com melhor esforço, comentários de pacotes com contexto de PID/processo. Para correlação na fase de limpeza, use --pcap-export com o sidecar JSONL e o opcional scripts/pcap_enrich.py. Consulte Exportação PCAP e Comparação com Ferramentas Similares para detalhes.

Construído sobre ratatui, libpcap, eBPF (libbpf-rs), DashMap, crossbeam, ring, MaxMind GeoLite2 e Landlock. Consulte ARCHITECTURE.md para o detalhamento completo das dependências.

Identificação de Processos Aprimorada por eBPF (Padrão no Linux)

O RustNet usa programas eBPF do kernel por padrão no Linux para melhor desempenho e identificação de processos com menor overhead.

Nomes de Processos:

  • O eBPF registra o TGID do líder do grupo de processos e o nome comm (um campo do kernel limitado a 16 caracteres) em vez do nome da thread ativa, portanto aplicações multithread mostram o nome do processo principal em vez de nomes de threads como "Socket Thread"
  • O RustNet então resolve novamente o nome atual via /proc/<tgid>/comm, recupera nomes truncados pelo comm a partir do nome do arquivo executável (ex.: "chromium-browse" torna-se "chromium-browser") e resolve o caminho completo do executável exibido na visualização de Detalhes
  • Processos de vida curta que terminam antes de esse enriquecimento ser executado mantêm o nome de 16 caracteres registrado pelo eBPF

Comportamento de Fallback:

  • Quando o eBPF falha ao carregar ou não tem permissões suficientes, o RustNet volta automaticamente para a identificação de processos padrão baseada em procfs
  • O modo padrão resolve nomes da mesma forma por meio da varredura do procfs, mas com maior uso de CPU
  • O eBPF está habilitado por padrão; nenhuma flag de build especial é necessária

Para desabilitar o eBPF e usar o modo somente procfs, compile com:

cargo build --release --no-default-features

Consulte ARCHITECTURE.md para informações técnicas.

Monitoramento de Atividade de Processos e Interfaces

O RustNet combina contabilidade de tráfego em nível de processo com estatísticas de interface de rede em tempo real:

  • Aba Visão Geral: Mostra interfaces ativas com taxas, erros e quedas atuais
  • Aba Atividade (pressione 3): Classifica processos por Egress (TX) ou Ingress (RX), incluindo tráfego retido e contínuo, taxas, participações, conexões e destinos
  • Fluxo de Trabalho de Segurança: Ordene por Egress, identifique um uploader inesperado e inspecione seu principal peer remoto e o tráfego retido mesmo após a conexão fechar
  • Detalhes da Interface (pressione i na Atividade): Mostra as métricas abrangentes originais de cada interface
  • Multiplataforma: Linux (sysfs), macOS/FreeBSD (getifaddrs), Windows (API GetIfTable2)
  • Filtragem Inteligente: O Windows exclui automaticamente adaptadores virtuais/filtro

Consulte USAGE.md para documentação detalhada sobre como interpretar estatísticas de interface e o comportamento específico da plataforma.

Métricas Disponíveis:

  • Total de bytes e pacotes (RX/TX)
  • Contadores de erros (recebimento e transmissão)
  • Quedas de pacotes (estouro de filas)
  • Colisões (legado, raramente usado em redes modernas)

As estatísticas são coletadas a cada 2 segundos em uma thread em segundo plano com impacto mínimo no desempenho.

Capturas de Tela

Visão Geral
Tabela de conexões com estatísticas ao vivo e sparklines
Detalhes
SNI, cifra, GeoIP e DPI por conexão
Gráfico
Gráfico de tráfego, distribuição de aplicativos, principais processos
Atividade
Egress/ingress de processos, cobertura de 60 segundos, atribuição e peers remotos

Início Rápido

Instalação

Homebrew (macOS / Linux):

brew install rustnet

Ubuntu (22.04 LTS+) / Linux Mint 21+ / Pop!_OS 22.04+:

sudo add-apt-repository ppa:domcyrus/rustnet
# on Pop!_OS: sudo apt-manage add ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet

Fedora (42+):

sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet

openSUSE Tumbleweed:

sudo zypper addrepo https://download.opensuse.org/repositories/home:/domcyrus:/rustnet/openSUSE_Tumbleweed/home:domcyrus:rustnet.repo
sudo zypper refresh
sudo zypper install rustnet

Arch Linux:

sudo pacman -S rustnet

Nix / NixOS:

nix-shell -p rustnet
# Then inside the shell: sudo rustnet

Do crates.io:

cargo install rustnet-monitor

Windows (Chocolatey):

# Run in Administrator PowerShell
# Requires Npcap (https://npcap.com) installed with "WinPcap API-compatible Mode" enabled
choco install rustnet

Outras plataformas:

Executando o RustNet

A captura de pacotes requer privilégios elevados:

# Quick start (all platforms)
sudo rustnet

# Linux: Grant capabilities to run without sudo (recommended)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet

Opções comuns:

rustnet -i eth0              # Specify network interface
rustnet --show-localhost     # Show localhost connections
rustnet --no-resolve-dns     # Disable reverse DNS lookups (enabled by default)
rustnet -r 500               # Set refresh interval (ms)
rustnet --theme tokyo-night  # Theme: muted (default), vivid, catppuccin-mocha, tokyo-night, gruvbox, nord
rustnet --pcapng-export capture.pcapng  # Annotated PCAPNG for Wireshark

O tema e as substituições por cor também podem ser definidos em ~/.config/rustnet/config.toml; --theme tem precedência. Consulte USAGE.md para o esquema.

Consulte INSTALL.md para configuração detalhada de permissões e USAGE.md para todas as opções.

Se você definir as capabilities mas a TUI ainda mostrar eBPF unavailable, consulte eBPF indisponível apesar das capabilities definidas na seção de solução de problemas.

Controles de Teclado

TeclaAção
qSair (pressione duas vezes para confirmar)
Ctrl+CSair imediatamente
xLimpar todas as conexões (pressione duas vezes para confirmar)
Tab ou ]Próxima aba
Shift+Tab ou [Aba anterior
15Ir para Visão Geral / Detalhes / Atividade / Gráfico / Ajuda
↑/k ↓/jNavegar para cima/baixo
g GIr para a primeira/última conexão
EnterVer detalhes da conexão
EscVoltar ou limpar filtro
cCopiar endereço remoto
pAlternar nomes de serviços/portas
dAlternar hostnames/IPs na Visão Geral ou Egress/Ingress na Atividade
s SAlternar colunas de ordenação / alternar direção
aAlternar agrupamento por processo
SpaceExpandir/recolher grupo de processos
←/→ ou h/lRecolher/expandir grupo
PageUp/PageDown ou Ctrl+B/FNavegação por páginas
tAlternar conexões históricas (fechadas)
iAlternar informações do sistema na Visão Geral ou detalhes da interface na Atividade
rRedefinir visualização (agrupamento, ordenação, filtro)
/Entrar no modo de filtro
hAlternar ajuda

Consulte USAGE.md para controles de teclado detalhados e dicas de navegação.

Filtragem & Ordenação

Exemplos rápidos de filtragem:

/google                        # Search for "google" anywhere
/port:443                      # Filter by port
/process:firefox               # Filter by process
/state:established             # Filter by connection state
/dport:443 sni:github.com      # Combine filters

Ordenação:

  • Pressione s para percorrer as colunas ordenáveis (Processo, Endereços, Serviço, Aplicativo, Estado, Largura de Banda)
  • Pressione S (Shift+s) para alternar a direção da ordenação
  • Encontre quem consome mais largura de banda: Pressione s até aparecer "Bandwidth Total ↓" (ordena pela velocidade combinada de upload+download)

Consulte USAGE.md para a sintaxe completa de filtragem e o guia de ordenação.

Exemplos Avançados de Filtragem

Filtros por palavra-chave:

  • port:44 - Portas que contêm "44" (443, 8080, 4433)
  • sport:80 - Portas de origem que contêm "80"
  • dport:443 - Portas de destino que contêm "443"
  • src:192.168 - IPs de origem que contêm "192.168"
  • dst:github.com - Destinos que contêm "github.com"
  • process:ssh - Nomes de processos que contêm "ssh"
  • sni:api - Hostnames SNI que contêm "api"
  • app:openssh - Conexões SSH que usam OpenSSH
  • state:established - Filtra por estado do protocolo
  • proto:tcp - Filtra por tipo de protocolo

Filtragem por estado:

  • state:syn_recv - Conexões meio abertas (detecção de inundação SYN)
  • state:established - Somente conexões estabelecidas
  • state:quic_connected - Conexões QUIC ativas
  • state:dns_query - Conexões de consulta DNS

Exemplos combinados:

  • sport:80 process:nginx - Conexões Nginx da porta 80
  • dport:443 sni:google.com - HTTPS para o Google
  • process:firefox state:quic_connected - Conexões QUIC do Firefox
  • dport:22 app:openssh state:established - Conexões OpenSSH estabelecidas
Ciclo de Vida das Conexões e Indicadores Visuais

O RustNet usa timeouts inteligentes e avisos visuais antes de remover conexões:

Indicadores visuais de obsolescência:

  • Branco: Ativa (< 75% do timeout)
  • Amarelo: Obsoleta (75-90% do timeout)
  • Vermelho: Crítica (> 90% do timeout)

Timeouts cientes do protocolo:

  • HTTP/HTTPS: 10 minutos (suporta keep-alive)
  • SSH: 30 minutos (sessões longas)
  • TCP estabelecido genérico: 5 minutos
  • QUIC conectado: 3 minutos (ou o timeout ocioso do transport-param do peer, quando presente); Initial/Handshaking: 60 segundos
  • DNS: 30 segundos
  • TCP CLOSED: 15 segundos de tolerância para arquivamento

Exemplo: Uma conexão HTTP fica amarela aos 7,5 min, vermelha aos 9 min e é removida aos 10 min.

Consulte USAGE.md para detalhes completos sobre timeouts.

Documentação

  • INSTALL.md - Instruções detalhadas de instalação para todas as plataformas, configuração de permissões e solução de problemas
  • USAGE.md - Guia de uso completo incluindo opções de linha de comando, filtragem, ordenação e registro
  • SECURITY.md - Recursos de segurança incluindo sandbox Landlock e gerenciamento de privilégios
  • ARCHITECTURE.md - Arquitetura técnica, implementações por plataforma e detalhes de desempenho
  • CONTRIBUTING.md - Fluxo de trabalho de contribuição, requisitos de qualidade e diretrizes do projeto
  • PROFILING.md - Guia de criação de perfil de desempenho com configuração de flamegraph e dicas de otimização
  • ROADMAP.md - Recursos planejados e melhorias futuras
  • RELEASE.md - Processo de lançamento para mantenedores

Contribuindo

Contribuições são bem-vindas! Consulte CONTRIBUTING.md para as diretrizes sobre como contribuir.

Consulte CONTRIBUTORS.md para uma lista de pessoas que contribuíram com este projeto.

Licença

Este projeto é licenciado sob a Apache License, Versão 2.0 - consulte o arquivo LICENSE para obter detalhes.

Agradecimentos

  • Construído com ratatui para a interface de terminal
  • Captura de pacotes alimentada por libpcap
  • Inspirado por ferramentas como tshark/wireshark/tcpdump, sniffnet, netstat, ss, iftop e bandwhich
  • Parte do código foi escrita no estilo vibe coding (OMG) / que os deuses dos LLMs estejam com você

Documentação Movida

Algumas seções foram movidas para arquivos dedicados para melhor organização:

Categorias