NetStatAnalyzer é um monitor visual de conexões de rede para Windows. Ele mapeia em tempo real todas as portas e sockets ativos (TCP e UDP), identificando instantaneamente o executável, PID, caminho em disco e ícone de cada processo.
Inspecionar conexões de rede no Windows pelo terminal usando o netstat tradicional costuma ser um processo lento e pouco intuitivo. Identificar qual aplicativo abriu determinada porta exige cruzar tabelas de texto com o Gerenciador de Tarefas manualmente.
O NetStatAnalyzer resolve esse problema entregando:
- Visibilidade imediata de processos e portas sem travar a interface gráfica.
- Filtro rápido para separar conexões normais do sistema de conexões desconhecidas ou suspeitas.
- Exportação prática dos dados para auditoria e análise de segurança.
- Monitoramento Contínuo: Leitura rápida de sockets TCP e UDP com atualização assíncrona em segundo plano.
- Identificação de Processos: Extração automática de ícone, nome do executável, PID e caminho em disco.
- Badges de Estado: Cores distintas para estados como ESTABLISHED, LISTENING, TIME_WAIT, CLOSE_WAIT e SYN_SENT.
- Painel de Métricas: Contadores em tempo real para o total de conexões, conexões estabelecidas, portas em escuta e itens confiáveis.
- Busca Instantânea: Filtro global por nome do programa, PID, endereço IP local, endereço remoto ou porta.
- Seleção Múltipla Avançada: Suporte a intervalos contínuos com Shift + Clique e seleção descontínua com Ctrl + Clique.
- Integração com o Windows Explorer: Duplo clique em qualquer linha para abrir a pasta do executável diretamente.
Para facilitar a triagem de tráfego de rede, o aplicativo permite cadastrar conexões conhecidas como confiáveis. A regra associa estritamente o Nome do Processo ao Endereço IP.
flowchart LR
A[Conexão Detectada] --> B{Processo + IP estão na lista?}
B -- Sim --> C[Conexão Confiável com Badge Verde]
B -- Não --> D[Tráfego Não Mapeado]
C --> E[Filtro: Ocultar Confiáveis]
D --> E
E --> F[Foco Imediato nas Conexões Suspeitas]
💡 Visualização Interativa: Veja este diagrama em detalhes ↗
- Selecione uma ou mais conexões na tabela principal e clique em Marcar como Confiável.
- Alterne o filtro de confiança para Ocultar Confiáveis para visualizar apenas o tráfego não mapeado.
- Acesse a janela Conexões Confiáveis para gerenciar, pesquisar, excluir, importar ou exportar suas regras em JSON.
O projeto foi estruturado seguindo os princípios de Clean Architecture e SOLID, mantendo uma separação clara entre regras de domínio, orquestração de casos de uso, adaptadores de sistema operacional e a interface WPF.
flowchart TD
subgraph Presentation_Layer [Apresentação: WPF e MVVM]
V[Views: MainWindow e AllowlistManagerWindow]
VM[ViewModels: MainViewModel e AllowlistManagerViewModel]
CMD[AsyncRelayCommand e Data Binding]
end
subgraph Application_Layer [Aplicação: Casos de Uso e Contratos]
UC1[ScanConnectionsUseCase]
UC2[ManageAllowlistUseCase]
UC3[ExportConnectionsUseCase]
PORTS[Portas: INetworkScanner, IProcessResolver, IAllowlistRepository, IConnectionExporter]
end
subgraph Domain_Layer [Domínio: Entidades e Políticas]
E1[NetworkConnection e AllowlistRule]
EN[Enums: NetworkProtocol e ConnectionState]
POL[TrustEvaluationPolicy]
end
subgraph Infrastructure_Layer [Infraestrutura: Adaptadores e I/O]
INF1[NetStatCliScanner]
INF2[Win32ProcessResolver]
INF3[JsonFileAllowlistRepository com Fallback AppData]
INF4[FileConnectionExporter: CSV, TXT e JSON]
end
V --> VM
VM --> UC1 & UC2 & UC3
UC1 & UC2 & UC3 --> PORTS
UC1 & UC2 & UC3 --> E1 & EN & POL
INF1 & INF2 & INF3 & INF4 -. Implementam .-> PORTS
💡 Visualização Interativa: Veja este diagrama em detalhes ↗
- Concorrência e Thread-Safety: A coleta e o parseamento de rede rodam em threads em segundo plano via tarefas assíncronas. Os ícones extraídos do Windows são convertidos e congelados em memória com o método Freeze, garantindo consumo seguro na UI Thread sem problemas de thread affinity.
- Cache de Recursos em Memória: Para evitar leituras repetitivas em disco ao encontrar dezenas de conexões do mesmo aplicativo (como navegadores), o
ProcessIconCacheutiliza um dicionário concorrente em memória, reduzindo o I/O de disco em mais de noventa por cento. - Inversão de Dependência: O motor de varredura e a persistência são isolados atrás de interfaces. Isso permite evoluir a leitura de sockets para chamadas nativas de P/Invoke da API do Windows sem alterar a camada de apresentação.
- Persistência Resiliente: Caso o aplicativo seja executado a partir de pastas protegidas sem permissão de escrita local, o repositório detecta a restrição e grava as configurações automaticamente no diretório AppData do usuário.
| Ação | Como Executar |
|---|---|
| Selecionar linha | Clique simples |
| Selecionar intervalo contínuo | Shift + Clique |
| Seleção múltipla alternada | Ctrl + Clique |
| Abrir pasta do executável | Duplo clique na linha ou menu de contexto |
| Menu de contexto | Clique com o botão direito na tabela |
| Recarregar conexões | Botão Recarregar ou tecla F5 |
Você pode exportar a lista de conexões exibidas na tela a qualquer momento nos seguintes formatos:
- JSON (.json): Dados estruturados prontos para scripts, integrações e ferramentas de segurança.
- CSV (.csv): Compatível com Excel, Power BI e Google Sheets para relatórios e filtros em planilhas.
- Texto (.txt): Relatório formatado em colunas alinhadas com cabeçalho e resumo de métricas.
- Sistema Operacional: Windows 10 (versão 19041+) ou Windows 11 (64-bit).
- SDK: .NET 8.0 SDK instalado.
Para compilar e iniciar o aplicativo imediatamente em ambiente local:
dotnet runVocê pode publicar o NetStatAnalyzer em dois formatos práticos:
Gera um executável único que já traz o runtime do .NET 8 embutido e comprimido. Não necessita de nenhuma instalação prévia de .NET no computador de destino:
dotnet publish NetStatAnalyzer.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:EnableCompressionInSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o ./publishO arquivo executável pronto para uso estará em:
./publish/NetStatAnalyzer.exe
Gera um executável leve para máquinas que já possuem o .NET 8 Desktop Runtime instalado:
dotnet publish NetStatAnalyzer.csproj -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true -o ./publish-compactO arquivo executável estará em:
./publish-compact/NetStatAnalyzer.exe
O projeto conta com uma suíte de testes unitários automatizados cobrindo as regras de negócio centrais da aplicação (34 testes com xUnit):
- Política de Conexões Confiáveis (
TrustEvaluationPolicy): Validação de extração e sanitização de endereços IPv4/IPv6 com portas, correspondência case-insensitive por processo, detecção de wildcards (0.0.0.0,*:*,[::]:0) e validação de portas locais para sockets em escuta. - Gerenciamento de Regras Confiáveis (
ManageAllowlistUseCase): Inclusão com prevenção contra duplicatas, remoção granular e em lote, persistência e disparo de eventos de notificação. - Varredura e Mapeamento de Conexões (
ScanConnectionsUseCase): Mapeamento e enriquecimento de sockets de rede com resolução de processos e atribuição de confiabilidade. - Exportação de Dados (
FileConnectionExporter): Formatação correta e escape de dados para CSV, relatórios em colunas alinhadas em TXT e serialização com metadados em JSON.
dotnet testOs testes são executados e validados automaticamente a cada push ou pull request para a branch main através do workflow no GitHub Actions, assegurando que o badge de status reflita fielmente o estado real e verificável da suíte em ambiente Windows com .NET 8.0 SDK.
NetStatAnalyzer/
├── .github/
│ └── workflows/
│ └── tests.yml # Pipeline de CI (execução automatizada de testes)
├── assets/
│ ├── icon.ico # Ícone do aplicativo para Windows
│ ├── icon.png # Logotipo em alta resolução
│ ├── icon-dark.ico # Ícone variante para temas escuros
│ └── icon-dark.png # Logotipo variante
├── Domain/
│ ├── Entities/
│ │ ├── AllowlistRule.cs # Entidade de regra de confiança
│ │ └── NetworkConnection.cs # Entidade pura de conexão de rede
│ ├── Enums/
│ │ ├── ConnectionState.cs # Estados tipados de sockets TCP
│ │ └── NetworkProtocol.cs # Protocolos de rede (TCP, UDP)
│ └── Policies/
│ └── TrustEvaluationPolicy.cs # Regras de validação e normalização de IP
├── Application/
│ ├── Contracts/
│ │ ├── IAllowlistRepository.cs # Contrato de persistência de regras
│ │ ├── IConnectionExporter.cs # Contrato de exportação de dados
│ │ ├── INetworkScanner.cs # Contrato de varredura de sockets
│ │ └── IProcessResolver.cs # Contrato de resolução de processos
│ ├── DTOs/
│ │ └── RawSocketInfo.cs # DTO de leitura bruta de sockets
│ └── UseCases/
│ ├── ExportConnectionsUseCase.cs # Orquestração de exportação de arquivos
│ ├── ManageAllowlistUseCase.cs # Gestão de regras e eventos
│ └── ScanConnectionsUseCase.cs # Varredura e enriquecimento de conexões
├── Infrastructure/
│ ├── Exporting/
│ │ └── FileConnectionExporter.cs # Gerador de relatórios CSV, TXT e JSON
│ ├── Persistence/
│ │ └── JsonFileAllowlistRepository.cs # Persistência JSON com fallback AppData
│ ├── Processes/
│ │ └── Win32ProcessResolver.cs # Introspecção Win32 de processos do Windows
│ └── Scanning/
│ └── NetStatCliScanner.cs # Leitura e parsing de comandos de rede
├── Presentation/
│ ├── Common/
│ │ ├── AsyncRelayCommand.cs # Comando assíncrono para MVVM
│ │ ├── RelayCommand.cs # Comando síncrono para MVVM
│ │ └── ViewModelBase.cs # Base com suporte a PropertyChanged
│ ├── Converters/
│ │ └── EmptyStringToVisibilityConverter.cs # Conversores de valor XAML
│ ├── Extensions/
│ │ └── DataGridExtensions.cs # Ajuste automático de largura de colunas
│ ├── Services/
│ │ └── ProcessIconCache.cs # Cache thread-safe de ícones em memória
│ └── ViewModels/
│ ├── AllowlistManagerViewModel.cs # ViewModel do gerenciador de regras
│ ├── ConnectionItemViewModel.cs # ViewModel de linha e badges visuais
│ └── MainViewModel.cs # ViewModel da janela principal
├── NetStatAnalyzer.Tests/ # Bateria de testes automatizados (xUnit)
│ ├── TrustEvaluationPolicyTests.cs # Testes de confiabilidade e sanitização de IP
│ ├── ManageAllowlistUseCaseTests.cs # Testes do gerenciador de regras
│ ├── ScanConnectionsUseCaseTests.cs # Testes de varredura e enriquecimento
│ ├── FileConnectionExporterTests.cs # Testes dos exportadores CSV, TXT e JSON
│ └── NetStatAnalyzer.Tests.csproj
├── AllowlistManagerWindow.xaml # Interface do gerenciador de regras
├── AllowlistManagerWindow.xaml.cs
├── App.xaml # Inicialização e estilos globais
├── App.xaml.cs
├── AssemblyInfo.cs # Informações de assembly
├── MainWindow.xaml # Interface da janela principal
├── MainWindow.xaml.cs # Inicialização da view e bindings
├── NetStatAnalyzer.csproj # Configuração de build do .NET 8
├── NetStatAnalyzer.sln # Solução Visual Studio
└── LICENSE # Licença MIT
Este projeto é distribuído sob os termos da licença MIT. Consulte o arquivo para obter todos os detalhes.
