
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.
Un monitor de tráfico de red para GNU/Linux — anteriormente conocido como Packet-Sniffer. Las tramas se capturan desde una o varias interfaces de red con un socket raw, con marca de tiempo del propio kernel, se decodifican capa por capa con la librería NETProtocols, y se renderizan en vivo, se escriben a un pcap con precisión de nanosegundos, 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: Maximum Segment Size (1460), SACK Permitted, Timestamps (3644437524, 0), No-Operation, Window Scale (7)
El decodificador cubre Ethernet (etiquetas VLAN 802.1Q, incluyendo el
etiquetado QinQ anidado), ARP, IPv4 (opciones decodificadas y
fragmentos), IPv6 incluyendo cabeceras de extensión (un informe MLD
renderiza su cadena completa Hop-by-Hop) y Neighbor Discovery (una
Solicitud o Anuncio de Router/Neighbor muestra su dirección objetivo y
opciones de capa de enlace), ICMPv4/v6, TCP (offsets de payload conscientes
de opciones, opciones decodificadas) y UDP. Cada checksum de
IPv4/ICMPv4/ICMPv6/TCP/UDP se verifica contra un recálculo, marcando una
discrepancia en línea (Checksum: 0x0000 [!] mismatch (expected 0x1a2b)) —
una señal real para tráfico corrupto o falsificado, silenciosa para un
fragmento no reensamblado, donde el checksum del cable cubre un datagrama
que RootWire nunca reconstruye. Las tramas malformadas o truncadas se
diagnostican en lugar de hacer fallar la captura, los protocolos
desconocidos terminan la cadena de forma controlada, y un límite de 16
capas evita que pilas de cabeceras de extensión fabricadas amplifiquen —
la captura sobrevive a lo que sea que entregue la red.
pipx install rootwire # or: uv tool install rootwire
O ejecutar desde un clon con uv:
git clone https://github.com/EONRaider/RootWire.git
cd RootWire
uv sync
rootwire [-h] [-i INTERFACE] [-r FILE] [-w FILE]
[--filter NAME_OR_EXPR] [--json] [-d] [--version]
options:
-i, --interface interface to capture frames from; repeat to capture on
several interfaces concurrently (default: all interfaces)
-r, --read FILE replay frames from a pcap or pcapng file instead of live
capture (no privileges required; mutually exclusive
with -i)
-w, --write FILE also write every captured frame to a classic pcap file
--filter NAME_OR_EXPR
attach a kernel-side capture filter so only matching
frames reach userspace: a canned name (arp, ip6, tcp,
udp) or a filter expression -- protocols tcp/udp/icmp/
arp/ip/ip6; host/port, each optionally prefixed with
src/dst; and/or/not; parentheses (e.g. "tcp and port
80"); live capture only
--json one NDJSON object per frame on stdout (banner and
statistics stay on stderr): pipe straight into jq
-d, --data also display each frame's raw payload (ignored with --json)
Las estadísticas de captura — tramas, bytes, tramas/s, conteos de
malformadas/truncadas, recuentos por protocolo — se reportan en stderr
cuando la captura termina, ya sea por Ctrl-C, SIGTERM, o (para -r) fin
de archivo: los tres desencadenan el mismo apagado limpio. Algunas
combinaciones favoritas:
sudo rootwire -i eth0 -w session.pcap # capture and keep the evidence
sudo rootwire -i eth0 --filter tcp # drop non-TCP in the kernel
sudo rootwire -i eth0 --filter "tcp and port 80" # kernel-side filter expression
sudo rootwire -i eth0 -i wlan0 # merge two interfaces into one stream
rootwire -r session.pcap # inspect it later, no root
rootwire -r session.pcap --json | jq . # machine-readable analysis
La captura en vivo necesita un socket raw, lo que en Linux significa root
(sudo rootwire -i eth0) o conceder al intérprete la capacidad
CAP_NET_RAW. Reproducir archivos con -r nunca necesita privilegios.
Desde un clon, ejecútalo como sudo .venv/bin/python -m rootwire.
El capture_async() de capture.py produce tramas raw — fusionadas desde
un socket AF_PACKET por interfaz, cada una con marca de tiempo del propio
kernel al llegar (SO_TIMESTAMPNS, no una lectura del reloj en espacio de
usuario) — como tuplas (bytes, timestamp, interface); la reproducción
desde un archivo con -r adapta las tramas de pcap.py
a esa misma forma antes de que cualquiera de las fuentes llegue a
decoder.py, que recorre la cadena de protocolos de cada trama hasta un
DecodedFrame inmutable. Las salidas — el renderizador de pantalla, el
flujo NDJSON, el escritor de pcap, el recolector de estadísticas —
consumen cada trama a través de una pequeña interfaz Output. El recorrido
completo, incluyendo 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 raw se ejecuta en cualquier SO, 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
Los informes de errores y las pull requests son bienvenidos. CONTRIBUTING.md cubre la configuración de desarrollo, las comprobaciones que ejecuta CI, y cómo se ve una buena pull request aquí.
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 obedecer todas las leyes locales, estatales y federales aplicables.
Los desarrolladores no asumen ninguna responsabilidad y no son responsables de los malos usos o daños causados por cualquier código contenido en este repositorio en cualquier evento en que, accidentalmente o de otro modo, llegue a ser utilizado por un agente de amenaza 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 "comprometer" se entiende en adelante como el aprovechamiento de la explotación de vulnerabilidades conocidas o desconocidas presentes en dichos sistemas, incluyendo, pero no limitado a, la implementación de controles de seguridad, habilitados por humanos o electrónicamente.