
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 I/O ao vivo em uma interface gráfica moderna.
# 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. [](https://github.com/grigio/network-monitor/actions/workflows/rust.yml) [](https://deps.rs/repo/github/grigio/network-monitor) ## 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: ```bash sudo apt update sudo apt install libgtk-4-dev libadwaita-1-dev ``` ### Instalação no Fedora: ```bash sudo dnf install gtk4-devel libadwaita-devel ``` ## Instalação ### Método 1: Instalar a partir do código-fonte com integração ao desktop 1. Clone o repositório: ```bash git clone <repository-url> cd network-monitor ``` 2. Instale localmente (sem necessidade de sudo): ```bash ./scripts/install.sh ``` 3. Ou instale em todo o sistema (requer sudo): ```bash 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 1. Clone o repositório: ```bash git clone <repository-url> cd network-monitor ``` 2. Compile e execute: ```bash cargo run ``` Ou compile em modo release: ```bash cargo build --release ./target/release/network-monitor ``` ### Método 3: Compilar e executar a versão TUI 1. Clone o repositório: ```bash git clone <repository-url> cd network-monitor ``` 2. Compile e execute a TUI: ```bash cargo build --bin nmt ./target/debug/nmt ``` Ou compile em modo release: ```bash cargo build --release --bin nmt ./target/release/nmt ``` ## Desinstalação ### Remover a versão instalada Remoção da instalação local: ```bash ./scripts/uninstall.sh ``` Remoção em todo o sistema (requer sudo): ```bash 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: ```bash 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: ```bash 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:** ```bash rustup toolchain install nightly cargo install bpf-linker ``` **Compilar e executar:** ```bash cargo build ``` **Executar como usuário normal** (requer kernel 5.8+): Conceda as capacidades Linux necessárias ao binário uma vez: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor ./target/debug/network-monitor ``` Ou para a versão TUI: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt ./target/debug/nmt ``` Para compilações release, ajuste o caminho de acordo: ```bash sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor ``` O aplicativo sairá com uma mensagem de configuração se o eBPF não estiver disponível (capacidades ausentes ou kernel não suportado). ## Arquitetura - **GTK4**: Framework GUI moderno e multiplataforma - **Libadwaita**: Componentes de interface no estilo GNOME - **Tokio**: Runtime assíncrono para operações concorrentes - **Aya + eBPF**: Rastreamento de conexões em nível de kernel com kprobes para eventos em tempo real - **PID direto**: Identificação de processos via `bpf_get_current_pid_tgid()` no ponto de probe - **Chamadas de sistema**: Leitura direta de `/proc/[pid]/io` para estatísticas de E/S - **Tratamento de erros**: Tipos de erro abrangentes com recuperação graciosa usando `thiserror` - **Cache de desempenho**: Cache de layout da interface para desempenho ideal ## Pacotes Linux [](https://repology.org/project/network-monitor/versions) ## Doações Se você achar este projeto útil, considere fazer uma doação para apoiar seu desenvolvimento. - **Monero**: `88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv` - **Bitcoin**: `bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025` ## Licença Este projeto é de código aberto. Consulte o arquivo LICENSE para detalhes.