Desenvolvi o PacketShield: Um monitor de rede para Windows com bloqueios por app
Olá, comunidade TabNews! Sou dev e recentemente criei o PacketShield, uma ferramenta gratuita para monitorar e controlar o tráfego de rede no Windows. Inspirado em apps como TinyShield (pra Mac) ou Little Snitch, mas focado no ecossistema Windows, ele ajuda a ver o que seus apps estão fazendo online, bloquear domínios/apps devoradores de banda e otimizar o uso de internet. Quero compartilhar o processo de build aqui, como forma de build in public, e pedir feedback de vocês — quem sabe não vira uma collab?
Por Que Criei Isso?
Trabalho remoto, jogos online e apps background me fizeram perder o controle da rede várias vezes. Ferramentas como Wireshark são poderosas, mas complexas pra uso diário. Firewalls nativos do Windows são básicos. Queria algo simples, leve e com UI moderna: monitore por app/processo, veja domínios recentes, aplique bloqueios persistentes e tenha gráficos rápidos. Como dev .NET/React, resolvi buildar do zero.
Comparado ao TinyShield (que é pago e Mac-only), o PacketShield é grátis, Windows-specific, com histórico de 1h e API local pra extensões. Preenche uma lacuna pra quem migra de Mac ou quer algo personalizado.
Arquitetura e Tech Stack
O app é dividido em três partes pra modularidade e performance:
-
PacketShield.Service (Windows Service em .NET 8):
- Captura conexões via IP Helper API (GetExtendedTcp/UdpTable) e estima bytes por app a cada ~1s.
- Bloqueios via Windows Filtering Platform (WFP) na camada ALE_AUTH_CONNECT, com fallback pro Firewall nativo.
- Agrupa tráfego por executável, resolve domínios/IPs e mantém histórico de 1h pra gráficos/top apps.
- Persistência em SQLite (Dapper): regras, logs, apps e settings.
- API HTTP local (localhost:5180) pra expor dados à UI: stats, histórico, regras (CRUD/import/export).
-
PacketShield.Core: Models compartilhados (AppModel, Rule, TrafficLog) e repo SQLite.
-
PacketShield.UI (Tauri + React/Vite):
- Janela principal: Lista apps ativos (nome, exe, domínios, tráfego), bloqueios rápidos, regras e settings.
- Popup no tray: Gráfico de upload/download (1h, buckets de 5s via Recharts) + top 10 apps.
- Features: Idioma (EN/PT-BR), dark mode, auto-start, toggle histórico.
- Tech: Tailwind, Zustand, Lucide-React, tauri-plugin-positioner pra ancorar o popup.
Aqui um diagrama simples da arquitetura:
graph TD
A[UI Tauri/React] --> B[API Local HTTP]
B --> C[Service .NET]
C --> D[SQLite DB]
C --> E[WFP/Firewall + IP Helper]
Código de exemplo (do serviço capturando tráfego):
public class NetworkCaptureWorker : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_networkCapture.CaptureNetworkData();
await Task.Delay(1000, stoppingToken);
}
}
}
Funcionalidades em Detalhe
- Monitoramento Contínuo: Bytes por app/processo, com domínios resolvidos. Apps inativos somem da lista.
- Bloqueios Inteligentes: Por app ou domínio, persistentes no boot. WFP pra eficiência, fallback pra compatibilidade.
- Análises Rápidas: Histórico de 1h pra gráficos e top apps — toggleável pra modo lightweight.
- UI Intuitiva: Tray icon pra quick view; janela com efeito acrylic, hide via X (mantém serviço rodando).
- Personalização: Settings pra idioma, tema, auto-start. Reset de DB via API.
Fluxo típico:
- Serviço inicia e captura dados.
- UI consome API pra renderizar lista/gráficos.
- Bloqueie na UI → API grava regra → WFP aplica.
- Tray popup pra métricas instantâneas.
Vídeo demo: ex. bloqueando um app e vendo o gráfico atualizar
Desafios e Lições
- Integração WFP: Foi tricky lidar com permissões admin; fallback ajudou.
- Performance: Estimar bytes sem overhead — usei sampling de 1s.
- Tauri: Ótimo pra desktop nativo, mas debug de tray no Windows deu trabalho.
Como Usar e Baixar
Baixe em https://packetshield.solrachix.com/. Instale o serviço, abra a UI e pronto! Testado no Windows 10/11.
Futuros planos: Suporte a mais filtros, export de logs, notificações de picos, e quem sabe expandir para Linux um dia.
O que acham? Já usaram algo similar? Sugestões pra features? Feedback nos comentários — vamos melhorar juntos! Se curtiu, upvote e compartilhe. 😊