
Packet-Sniffer v4.0.0
Analyseur de paquets réseau basé sur des sockets bruts qui capture et désassemble les paquets TCP/IP provenant des interfaces réseau, à des fins d'analyse de sécurité et d'utilisation pédagogique.
RootWire
Un moniteur de trafic réseau pour GNU/Linux — anciennement connu sous le nom de Packet-Sniffer. Les trames sont capturées depuis une interface réseau avec un socket brut, décodées couche par couche avec la bibliothèque NETProtocols, puis affichées en direct, écrites dans un fichier pcap ou diffusées en 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
Le décodeur couvre Ethernet, ARP, IPv4 (options et fragments), IPv6 y compris les en-têtes d'extension (un rapport MLD affiche sa chaîne Hop-by-Hop complète), ICMPv4/v6, TCP (décalages de charge utile tenant compte des options) et UDP. Les trames malformées ou tronquées sont diagnostiquées au lieu de faire planter la capture, les protocoles inconnus terminent la chaîne proprement, et une limite de 16 couches empêche les piles d'en-têtes d'extension forgées de s'amplifier — la capture survit à tout ce que le réseau délivre.
Installation
pipx install rootwire # ou : uv tool install rootwire
Ou exécutez-le depuis un clone avec uv :
git clone https://github.com/EONRaider/RootWire.git
cd RootWire
uv sync
Utilisation
rootwire [-h] [-i INTERFACE] [-r FILE] [-w FILE] [--json] [-d] [--version]
options:
-i, --interface interface à partir de laquelle capturer les trames (défaut : toutes les interfaces)
-r, --read FILE rejouer les trames depuis un fichier pcap classique au lieu d'une
capture en direct (aucun privilège requis)
-w, --write FILE écrire également chaque trame capturée dans un fichier pcap classique
--json un objet NDJSON par trame sur stdout (la bannière et les
statistiques restent sur stderr) : à rediriger directement vers jq
-d, --data afficher également la charge utile brute de chaque trame (ignoré avec --json)
Les statistiques de capture — trames, octets, trames/s, compteurs de trames malformées/tronquées, totaux par protocole — sont rapportées sur stderr à la fin de la capture. Quelques combinaisons favorites :
sudo rootwire -i eth0 -w session.pcap # capturer et conserver les preuves
rootwire -r session.pcap # l'inspecter plus tard, sans root
rootwire -r session.pcap --json | jq . # analyse lisible par machine
La capture en direct nécessite un socket brut, ce qui sous Linux
implique root (sudo rootwire -i eth0) ou l'octroi à l'interpréteur
de la capacité CAP_NET_RAW. La relecture de fichiers avec -r ne
nécessite jamais de privilèges. Depuis un clone, exécutez-le avec
sudo .venv/bin/python -m rootwire.
Comment ça fonctionne
capture.py produit des trames brutes depuis un socket AF_PACKET
(ou pcap.py les rejoue depuis un fichier — les deux sources sont
interchangeables) ; decoder.py parcourt la chaîne de protocoles de
chaque trame jusqu'à un DecodedFrame immuable ; les sorties — le
rendu à l'écran, le flux NDJSON, l'écrivain pcap, le collecteur de
statistiques — consomment chaque trame via une petite interface
Output. La visite complète, y compris pourquoi la mémoire reste
stable lors de longues captures et comment ajouter une sortie, se
trouve dans ARCHITECTURE.md.
Tout, sauf le socket brut, fonctionne sur n'importe quel système d'exploitation, donc la suite de tests — qui comprend un corpus de 65 trames de trafic réel capturé rejoué à travers tout le pipeline — ne nécessite ni root ni Linux :
uv run pytest
Feuille de route
- Filtrage BPF (filtres de capture côté noyau)
- Horodatages du noyau (
SO_TIMESTAMPNS) et utilisation de service propre avec SIGTERM - Rendu de la vérification des sommes de contrôle (la bibliothèque les calcule déjà)
Avertissement légal
L'utilisation du code contenu dans ce dépôt, en partie ou dans sa totalité, pour cibler des entités sans consentement mutuel préalable est illégale. Il incombe à l'utilisateur final de respecter toutes les lois locales, étatiques et fédérales applicables.
Les développeurs déclinent toute responsabilité et ne sont pas responsables des mauvais usages ou des dommages causés par tout code contenu dans ce dépôt, dans l'éventualité où, accidentellement ou autrement, il viendrait à être utilisé par un agent menaçant ou une entité non autorisée comme moyen de compromettre la sécurité, la vie privée, la confidentialité, l'intégrité et/ou la disponibilité de systèmes et de leurs ressources associées. Dans ce contexte, le terme « compromission » s'entend désormais comme l'exploitation de vulnérabilités connues ou inconnues présentes dans lesdits systèmes, y compris, sans s'y limiter, la mise en œuvre de contrôles de sécurité, activés par des moyens humains ou électroniques.
L'utilisation de ce code est uniquement approuvée par les développeurs dans les circonstances directement liées à des environnements éducatifs ou à des engagements de tests d'intrusion autorisés dont le but déclaré est de trouver et d'atténuer les vulnérabilités dans les systèmes, en limitant leur exposition aux compromissions et aux exploits employés par des agents malveillants tels que définis dans leurs modèles de menace respectifs.