Network Monitor

Uma ferramenta de monitoramento de conexões de rede em tempo real construída com Rust e GTK4, exibindo conexões ativas com estatísticas de E/S ao vivo em uma interface gráfica moderna.

Recursos
- Monitoramento em tempo real: Monitora continuamente as conexões de rede ativas
- Estatísticas de E/S: Mostra taxas de upload/download ao vivo para cada conexão
- Identificação de processos: Exibe o programa e o PID associados a cada conexão
- Ações de processo: Clique com o botão direito em uma linha para copiar seu valor/comando ou para encerrar o processo que
possui a conexão (Terminate ou Force Kill, com confirmação)
- Seleção persistente: A linha selecionada mantém seu destaque entre atualizações e é exibida na
faixa de status
- Interface GTK4 moderna: Interface gráfica limpa e responsiva com estilo Libadwaita
- Interface de Terminal (TUI): Interface de terminal interativa com os mesmos recursos de monitoramento
- Resolução de endereços: Simplifica endereços comuns (localhost, any, mDNS)
- Filtragem de conexões: Filtra conexões localhost para uma saída mais limpa
- Integração com GNOME: Suporte adequado à classe WM para fixação no dock e integração com o desktop
- Instalação dupla: Suporta instalação local do usuário e em todo o sistema
- Tratamento robusto de erros: Recuperação abrangente de erros com orientações claras de configuração
- Desempenho otimizado: Cache de processos e cache de layout para melhor responsividade
Requisitos
- Rust 1.70+ (edição 2021)
- Bibliotecas de desenvolvimento GTK4
- Bibliotecas de desenvolvimento Libadwaita
- Sistema Linux com sistema de arquivos
/proc
- Linux 5.8+ (para capacidades granulares de eBPF)
- Rust Nightly e
bpf-linker (para compilação eBPF)
Instalação no Ubuntu/Debian:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
Instalação no Fedora:
sudo dnf install gtk4-devel libadwaita-devel
Instalação
- Clone o repositório:
git clone <repository-url>
cd network-monitor
- Instale localmente (sem necessidade de sudo):
./scripts/install.sh
- Ou instale em todo o sistema (requer sudo):
sudo ./scripts/install.sh
O script de instalação irá:
- Compilar os binários GTK4 e TUI (debug para local, release para todo o sistema)
- Instalar os binários em
~/.local/bin/ (local) ou /usr/local/bin/ (todo o sistema)
- Instalar o arquivo desktop com a classe WM adequada para fixação no dock do GNOME
- Instalar ícones nos diretórios de ícones apropriados
- Atualizar o cache de ícones e o banco de dados do desktop
- Garantir que o aplicativo possa ser fixado no dock/dashboard do GNOME
Método 2: Compilar e executar diretamente
- Clone o repositório:
git clone <repository-url>
cd network-monitor
- Compile e execute:
cargo run
Ou compile em modo release:
cargo build --release
./target/release/network-monitor
Método 3: Compilar e executar a versão TUI
- Clone o repositório:
git clone <repository-url>
cd network-monitor
- Compile e execute a TUI:
cargo build --bin nmt
./target/debug/nmt
Ou compile em modo release:
cargo build --release --bin nmt
./target/release/nmt
Desinstalação
Remover a versão instalada
Remoção da instalação local:
./scripts/uninstall.sh
Remoção em todo o sistema (requer sudo):
sudo ./scripts/uninstall.sh
O script de desinstalação removerá o binário, o arquivo desktop e os ícones dos locais apropriados e atualizará todos os caches relevantes.
Uso
Interface Gráfica GTK4
Inicie o aplicativo de monitoramento de rede:
cargo run
O aplicativo abrirá uma janela GTK4 exibindo:
- Process(ID): Nome do processo e PID com mapeamento preciso de socket para processo
- Protocol: Protocolo TCP/UDP
- Source: Endpoint local (resolvido para formato legível)
- Destination: Endpoint remoto (resolvido para formato legível)
- Status: Estado da conexão (ESTABLISHED, LISTEN, etc.)
- TX: Taxa de upload calculada a partir das estatísticas de E/S do processo
- RX: Taxa de download calculada a partir das estatísticas de E/S do processo
- Path: Caminho completo do comando e argumentos de
/proc/[pid]/cmdline
Ações de linha
- Clique esquerdo: seleciona uma linha (também exibida na faixa inferior)
- Clique direito: abre o menu de contexto com Copy Value, Copy Command e
Kill "process" (PID), que pergunta se deve Terminate (SIGTERM) ou Force Kill (SIGKILL)
- Delete: encerra a linha atualmente selecionada (mesmo diálogo de confirmação)
- Ctrl+C: copia o conteúdo da célula
- Botão Refresh na barra de cabeçalho: atualiza imediatamente (a lista também é atualizada a cada 3s)
Interface de Terminal (TUI)

Inicie a interface de terminal:
cargo run --bin nmt
A TUI fornece os mesmos recursos de monitoramento em uma interface de terminal interativa:
Controles de Teclado:
q - Sair do aplicativo
r - Alternar resolução de hostname
R - Atualizar conexões manualmente
a - Alternar atualização automática (intervalos de 2 segundos)
↑/↓ - Navegar pelas conexões
←/→ - Rolar a tabela horizontalmente
k / clique direito - Abrir o menu de encerramento para uma linha (Terminate / Force Kill / Cancel)
1-8 - Ordenar por colunas (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path)
Mouse: clique esquerdo seleciona uma linha, clique direito a seleciona e abre o menu de encerramento.
Recursos:
- Monitoramento de conexões em tempo real com atualização automática
- Colunas ordenáveis com indicadores visuais
- Rolagem horizontal para tabelas largas
- Dimensionamento inteligente de colunas - a última coluna recebe toda a largura restante
- Protocolos com código de cores (TCP/TCP6 em verde, UDP/UDP6 em amarelo)
- Destaque de conexão ativa
- Informações de processo e PID
- Exibição de taxa de E/S ao vivo
- Mesma ordem de colunas da versão GTK4 para consistência
Resolução de Endereços
Endereços comuns são simplificados para legibilidade:
0.0.0.0:* ou *:* → ANY
127.0.0.1:* ou [::1]:* → LOCALHOST
224.0.0.251:* → MDNS
Como Funciona
Backend eBPF (orientado a eventos)
O aplicativo usa kprobes em nível de kernel (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) em vez de polling em /proc/net. Isso proporciona:
- Orientado a eventos: Entrega de eventos em menos de um milissegundo, sem sobrecarga de polling (~1-3% de CPU)
- PID direto: Capturado no ponto de probe via
bpf_get_current_pid_tgid(), sem varredura de inode
- Conexões de curta duração: Nunca perdidas entre intervalos de polling
Modo eBPF
O backend eBPF fornece monitoramento de conexões orientado a eventos com menor sobrecarga e eventos
em tempo real, em comparação com a abordagem padrão de polling em /proc/net. Ele pode capturar conexões de curta duração
que o polling pode perder.
Pré-requisitos:
rustup toolchain install nightly
cargo install bpf-linker
Compilar e executar:
cargo build