Voltar às atualizações
New releaseAug 22, 2026

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.

Compartilhar

RootWire

CI PyPI Python Version OS License

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)

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.

Licença

AGPL-3.0

Categorias