
Packet-Sniffer v4.0.0
Sniffer de pacotes de rede baseado em socket bruto que captura e desmonta pacotes TCP/IP de interfaces de rede para análise de segurança e uso educacional.
RootWire
Um monitor de tráfego de rede para GNU/Linux — anteriormente conhecido como Packet-Sniffer. Quadros são capturados de uma interface de rede com um socket bruto, decodificados camada por camada com a biblioteca NETProtocols, e renderizados ao vivo, gravados em pcap, ou transmitidos como JSON:
[>] Frame #4 at 15:42:07 (wlan0, 74 bytes)
[+] Ethernet 3c:7c:3f:1a:be:22 -> 9c:1e:95:aa:01:5f
EtherType: IPv4
[+] IPv4 192.168.1.96 -> 142.250.79.78
TTL: 64 | Flags: Don't fragment (DF) | Total Length: 60 | ID: 39754
Protocol: TCP | Checksum: 0x2b51
[+] TCP 51888 -> 443
Flags: 0x002 (SYN) | Seq: 3598801521 | Ack: 0
Window: 64240 | Checksum: 0x2008 | Options: 20 bytes
O decodificador cobre Ethernet, ARP, IPv4 (opções e fragmentos), IPv6 incluindo cabeçalhos de extensão (um relatório MLD renderiza sua cadeia Hop-by-Hop completa), ICMPv4/v6, TCP (offsets de payload cientes de opções) e UDP. Quadros malformados ou truncados são diagnosticados em vez de derrubar a captura, protocolos desconhecidos encerram a cadeia graciosamente, e um limite de 16 camadas impede que pilhas de cabeçalhos de extensão criadas artificialmente amplifiquem — a captura sobrevive ao que a rede entregar.
Instalação
pipx install rootwire # ou: uv tool install rootwire
Ou execute a partir de um clone com uv:
git clone https://github.com/EONRaider/RootWire.git
cd RootWire
uv sync
Uso
rootwire [-h] [-i INTERFACE] [-r FILE] [-w FILE] [--json] [-d] [--version]
options:
-i, --interface interface para capturar quadros (padrão: todas as interfaces)
-r, --read FILE reproduz quadros de um arquivo pcap clássico em vez de captura
ao vivo (nenhum privilégio necessário)
-w, --write FILE também grava cada quadro capturado em um arquivo pcap clássico
--json um objeto NDJSON por quadro no stdout (banner e estatísticas
permanecem no stderr): canalize diretamente para jq
-d, --data também exibe o payload bruto de cada quadro (ignorado com --json)
Estatísticas de captura — quadros, bytes, quadros/s, contagens de malformados/truncados, totais por protocolo — são reportadas no stderr quando a captura termina. Algumas combinações favoritas:
sudo rootwire -i eth0 -w session.pcap # captura e guarda a evidência
rootwire -r session.pcap # inspeciona depois, sem root
rootwire -r session.pcap --json | jq . # análise legível por máquina
A captura ao vivo precisa de um socket bruto, o que no Linux significa root
(sudo rootwire -i eth0) ou conceder ao interpretador a capacidade
CAP_NET_RAW. Reproduzir arquivos com -r nunca exige
privilégios. A partir de um clone, execute como sudo .venv/bin/python -m rootwire.
Como funciona
capture.py produz quadros brutos de um socket AF_PACKET (ou
pcap.py os reproduz de um arquivo — as duas fontes são
intercambiáveis); decoder.py percorre a cadeia de protocolos de cada quadro até
um DecodedFrame imutável; as saídas — o renderizador de tela, o fluxo
NDJSON, o gravador pcap, o coletor de estatísticas — consomem cada
quadro por meio de uma pequena interface Output. O tour completo, incluindo
por que a memória permanece estável durante capturas longas e como adicionar uma
saída, está em ARCHITECTURE.md.
Tudo, exceto o socket bruto, roda em qualquer sistema operacional, então a suíte de testes — que inclui um corpus de 65 quadros de tráfego real capturado reproduzido por todo o pipeline — não precisa de root nem de Linux:
uv run pytest
Roteiro
- Filtragem BPF (filtros de captura no lado do kernel)
- Timestamps do kernel (
SO_TIMESTAMPNS) e uso de serviço com encerramento limpo via SIGTERM - Renderização de verificação de checksum (a biblioteca já os calcula)
Aviso Legal
O uso do código contido neste repositório, seja em parte ou em sua totalidade, para atingir alvos sem consentimento mútuo prévio é ilegal. É responsabilidade do usuário final obedecer a todas as leis locais, estaduais e federais aplicáveis.
Os desenvolvedores assumem nenhuma responsabilidade e não são responsáveis por usos indevidos ou danos causados por qualquer código contido neste repositório em qualquer evento em que, acidentalmente ou de outra forma, ele venha a ser utilizado por um agente de ameaça ou entidade não autorizada como meio de comprometer a segurança, privacidade, confidencialidade, integridade e/ou disponibilidade de sistemas e seus recursos associados. Neste contexto, o termo "comprometimento" é doravante entendido como o aproveitamento da exploração de vulnerabilidades conhecidas ou desconhecidas presentes nos referidos sistemas, incluindo, mas não se limitando a, a implementação de controles de segurança, habilitados por humanos ou eletronicamente.
O uso deste código é somente endossado pelos desenvolvedores naquelas circunstâncias diretamente relacionadas a ambientes educacionais ou engajamentos de teste de penetração autorizados cujo propósito declarado é o de encontrar e mitigar vulnerabilidades em sistemas, limitando sua exposição a comprometimentos e exploits empregados por agentes maliciosos, conforme definido em seus respectivos modelos de ameaça.