
Monitorização de rede por processo para o seu terminal com inspeção profunda de pacotes. Multiplataforma, em sandbox.
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.
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.
netstat / ss não conseguem mostrar o estado ao vivo.--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.t para manter conexões históricas (fechadas) visíveis para perícia.port:, , , , , , , além de regex via .O RustNet preenche a lacuna entre ferramentas simples de conexão (netstat, ss) e analisadores de pacotes (Wireshark, tcpdump):
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.
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:
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"/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 DetalhesComportamento de Fallback:
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.
O RustNet combina contabilidade de tráfego em nível de processo com estatísticas de interface de rede em tempo real:
3): Classifica processos por Egress (TX) ou Ingress (RX), incluindo tráfego retido e contínuo, taxas, participações, conexões e destinosi na Atividade): Mostra as métricas abrangentes originais de cada interfaceConsulte USAGE.md para documentação detalhada sobre como interpretar estatísticas de interface e o comportamento específico da plataforma.
Métricas Disponíveis:
As estatísticas são coletadas a cada 2 segundos em uma thread em segundo plano com impacto mínimo no desempenho.
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:
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.
Consulte USAGE.md para controles de teclado detalhados e dicas de navegaçã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:
s para percorrer as colunas ordenáveis (Processo, Endereços, Serviço, Aplicativo, Estado, Largura de Banda)S (Shift+s) para alternar a direção da ordenaçãos 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.
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 OpenSSHstate:established - Filtra por estado do protocoloproto:tcp - Filtra por tipo de protocoloFiltragem por estado:
state:syn_recv - Conexões meio abertas (detecção de inundação SYN)O RustNet usa timeouts inteligentes e avisos visuais antes de remover conexões:
Indicadores visuais de obsolescência:
Timeouts cientes do protocolo:
Initial/Handshaking: 60 segundosExemplo: 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.
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.
Este projeto é licenciado sob a Apache License, Versão 2.0 - consulte o arquivo LICENSE para obter detalhes.
tshark/wireshark/tcpdump, sniffnet, netstat, ss, iftop e bandwhichAlgumas seções foram movidas para arquivos dedicados para melhor organização:
src:dst:sni:process:state:proto:/(?i)pattern/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.| 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 ![]() |
| Tecla | Ação |
|---|
q | Sair (pressione duas vezes para confirmar) |
Ctrl+C | Sair imediatamente |
x | Limpar todas as conexões (pressione duas vezes para confirmar) |
Tab ou ] | Próxima aba |
Shift+Tab ou [ | Aba anterior |
1–5 | Ir para Visão Geral / Detalhes / Atividade / Gráfico / Ajuda |
↑/k ↓/j | Navegar para cima/baixo |
g G | Ir para a primeira/última conexão |
Enter | Ver detalhes da conexão |
Esc | Voltar ou limpar filtro |
c | Copiar endereço remoto |
p | Alternar nomes de serviços/portas |
d | Alternar hostnames/IPs na Visão Geral ou Egress/Ingress na Atividade |
s S | Alternar colunas de ordenação / alternar direção |
a | Alternar agrupamento por processo |
Space | Expandir/recolher grupo de processos |
←/→ ou h/l | Recolher/expandir grupo |
PageUp/PageDown ou Ctrl+B/F | Navegação por páginas |
t | Alternar conexões históricas (fechadas) |
i | Alternar informações do sistema na Visão Geral ou detalhes da interface na Atividade |
r | Redefinir visualização (agrupamento, ordenação, filtro) |
/ | Entrar no modo de filtro |
h | Alternar ajuda |
state:established - Somente conexões estabelecidasstate:quic_connected - Conexões QUIC ativasstate:dns_query - Conexões de consulta DNSExemplos combinados:
sport:80 process:nginx - Conexões Nginx da porta 80dport:443 sni:google.com - HTTPS para o Googleprocess:firefox state:quic_connected - Conexões QUIC do Firefoxdport:22 app:openssh state:established - Conexões OpenSSH estabelecidas