Skip to content

matregnago/wirepenguin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WirePenguin 🐧

WirePenguin Logo

WirePenguin é um sniffer de pacotes de rede desenvolvido em Rust com interface gráfica no terminal (TUI). O projeto foi criado como trabalho acadêmico por Matheus Tregnago e Ricardo Bregalda.

📋 Características

  • Captura em tempo real de pacotes de rede
  • Interface gráfica no terminal intuitiva e interativa
  • Análise detalhada das camadas de enlace, rede e transporte
  • Visualização de cabeçalhos de protocolos
  • Gráficos dinâmicos mostrando estatísticas de captura
  • Múltiplas interfaces de rede suportadas

🚀 Protocolos Suportados

Camada de Enlace

  • Ethernet

Camada de Rede

  • IPv4
  • IPv6
  • ARP
  • ICMP
  • ICMPv6

Camada de Transporte

  • TCP
  • UDP

🛠️ Tecnologias Utilizadas

  • Linguagem: Rust
  • Bibliotecas principais:
    • pnet - Captura e tratamento de pacotes
    • ratatui - Interface gráfica no terminal
    • crossterm - Manipulação do terminal

📦 Instalação

Pré-requisitos

  • Rust 1.70+ instalado
  • Cargo (gerenciador de pacotes do Rust)
  • Permissões de administrador/root (necessário para captura de pacotes)

Compilação

# Clone o repositório
git clone https://github.com/matregnago/wirepenguin
cd wirepenguin

# Compile o projeto
cargo build --release

🎮 Uso

Execute o programa com privilégios de administrador:

sudo ./target/release/wirepenguin

⌨️ Controles

Tecla Ação
q Sair do programa
j ou Navegar para baixo na lista
k ou Navegar para cima na lista
i Alternar interface de rede
p Pausar/Continuar captura
Enter Ver detalhes do pacote selecionado

🖼️ Interface

O WirePenguin apresenta uma interface dividida em seções:

  1. Gráfico de Pacotes: Exibe estatísticas dos protocolos capturados
  2. Lista de Interfaces: Mostra as interfaces de rede disponíveis
  3. Tabela de Pacotes: Lista todos os pacotes capturados com informações básicas
  4. Rodapé: Exibe os atalhos de teclado disponíveis

🏗️ Arquitetura

O software utiliza um sistema baseado em eventos com threads separadas para:

  • Thread Principal: Gerencia a interface e processa eventos
  • Thread de Captura: Realiza o sniffing de pacotes
  • Thread de Renderização: Controla a atualização da tela (22 FPS)
  • Thread de Input: Captura entradas do teclado

Comunicação entre Threads

Utiliza canais MPSC (Multi-producer, single-consumer) para comunicação entre threads, com três tipos de eventos:

  • Render: Atualização da interface
  • PacketCaptured: Novo pacote capturado
  • Input: Entrada do usuário

📝 Estrutura do Projeto

wirepenguin/
├── src/
│   ├── main.rs           # Ponto de entrada
│   ├── app.rs            # Lógica principal da aplicação
│   ├── event.rs          # Definição de eventos
│   ├── packet_data.rs    # Estruturas de dados dos pacotes
│   ├── sniffer.rs        # Lógica de captura de pacotes
│   └── widgets/          # Componentes da interface
│       ├── charts.rs     # Gráfico de estatísticas
│       ├── footer.rs     # Rodapé com atalhos
│       ├── interfaces.rs # Lista de interfaces
│       ├── packet_table.rs # Tabela de pacotes
│       └── popup.rs      # Detalhes do pacote
├── Cargo.toml            # Configuração do projeto
└── README.md             # Este arquivo

👥 Autores

📚 Referências

About

Simple packet sniffer with a modern TUI.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages