
Packet-Sniffer v4.0.0
Sniffer de paquetes de red basado en sockets sin procesar que captura y desensambla paquetes TCP/IP de interfaces de red para análisis de seguridad y uso educativo.
RootWire
Un monitor de tráfico de red para GNU/Linux — antes conocido como Packet-Sniffer. Las tramas se capturan de una interfaz de red con un socket crudo, se decodifican capa por capa con la biblioteca NETProtocols y se renderizan en vivo, se escriben en pcap o se transmiten 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
El decodificador cubre Ethernet, ARP, IPv4 (opciones y fragmentos), IPv6 incluyendo cabeceras de extensión (un informe MLD renderiza su cadena Hop-by-Hop completa), ICMPv4/v6, TCP (desplazamientos de carga útil conscientes de opciones) y UDP. Las tramas malformadas o truncadas se diagnostican en lugar de provocar un fallo en la captura, los protocolos desconocidos terminan la cadena con elegancia, y un límite de 16 capas evita que las pilas de cabeceras de extensión creadas a medida se amplifiquen — la captura sobrevive a lo que sea que la red entregue.
Instalación
pipx install rootwire # o: uv tool install rootwire
O ejecútalo desde un clon con 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 interfaz desde la que capturar tramas (predeterminado: todas las interfaces)
-r, --read FILE reproducir tramas desde un archivo pcap clásico en lugar de captura
en vivo (no se requieren privilegios)
-w, --write FILE también escribir cada trama capturada a un archivo pcap clásico
--json un objeto NDJSON por trama en stdout (el banner y las
estadísticas permanecen en stderr): conéctalo directamente a jq
-d, --data también mostrar la carga útil cruda de cada trama (se ignora con --json)
Las estadísticas de captura — tramas, bytes, tramas/s, recuentos de malformadas/truncadas, totales por protocolo — se informan en stderr cuando la captura termina. Algunas combinaciones favoritas:
sudo rootwire -i eth0 -w session.pcap # captura y conserva la evidencia
rootwire -r session.pcap # inspecciónala después, sin root
rootwire -r session.pcap --json | jq . # análisis legible por máquina
La captura en vivo necesita un socket crudo, que en Linux significa root
(sudo rootwire -i eth0) u otorgar al intérprete la capacidad
CAP_NET_RAW. La reproducción de archivos con -r nunca requiere
privilegios. Desde un clon, ejecútalo como sudo .venv/bin/python -m rootwire.
Cómo funciona
capture.py produce tramas crudas desde un socket AF_PACKET (o
pcap.py las reproduce desde un archivo — las dos fuentes son
intercambiables); decoder.py recorre la cadena de protocolos de cada
trama hasta un DecodedFrame inmutable; las salidas — el renderizador
de pantalla, el flujo NDJSON, el escritor pcap, el recolector de
estadísticas — consumen cada trama a través de una pequeña interfaz
Output. El recorrido completo, incluido por qué la memoria se mantiene
plana durante capturas largas y cómo añadir una salida, está en
ARCHITECTURE.md.
Todo excepto el socket crudo se ejecuta en cualquier sistema operativo, por lo que la suite de pruebas — que incluye un corpus de 65 tramas de tráfico real capturado reproducido a través de todo el pipeline — no necesita ni root ni Linux:
uv run pytest
Hoja de ruta
- Filtrado BPF (filtros de captura en el núcleo)
- Marcas de tiempo del núcleo (
SO_TIMESTAMPNS) y uso de servicio limpio con SIGTERM - Renderizado de verificación de sumas de comprobación (la biblioteca ya las calcula)
Aviso legal
El uso del código contenido en este repositorio, ya sea en parte o en su totalidad, para atacar objetivos sin consentimiento mutuo previo es ilegal. Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables.
Los desarrolladores no asumen ninguna responsabilidad y no son responsables de usos indebidos o daños causados por cualquier código contenido en este repositorio en cualquier evento en que, accidental o intencionadamente, llegue a ser utilizado por un agente de amenazas o entidad no autorizada como medio para comprometer la seguridad, privacidad, confidencialidad, integridad y/o disponibilidad de sistemas y sus recursos asociados. En este contexto, el término "compromiso" se entiende en adelante como el aprovechamiento de vulnerabilidades conocidas o desconocidas presentes en dichos sistemas, incluyendo, pero sin limitarse a, la implementación de controles de seguridad, habilitados por humanos o electrónicamente.
El uso de este código es solo respaldado por los desarrolladores en aquellas circunstancias directamente relacionadas con entornos educativos o compromisos de pruebas de penetración autorizadas cuyo propósito declarado es el de encontrar y mitigar vulnerabilidades en sistemas, limitando su exposición a compromisos y exploits empleados por agentes maliciosos según se definen en sus respectivos modelos de amenazas.