
Packet-Sniffer v4.0.0
# Raw-Socket-basierter Netzwerk-Paket-Sniffer Ein auf Raw-Sockets basierender Netzwerk-Paket-Sniffer, der TCP/IP-Pakete von Netzwerkschnittstellen erfasst und zerlegt – für Sicherheitsanalysen und zu Bildungszwecken.
RootWire
Ein Netzwerkverkehrs-Monitor für GNU/Linux — ehemals bekannt als Packet-Sniffer. Frames werden über einen Raw-Socket von einer Netzwerkschnittstelle erfasst, mit der NETProtocols-Bibliothek Schicht für Schicht dekodiert und live dargestellt, in eine pcap-Datei geschrieben oder als JSON gestreamt:
[>] 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
Der Dekoder deckt Ethernet, ARP, IPv4 (Optionen und Fragmente), IPv6 einschließlich Extension Headers (ein MLD-Report rendert seine vollständige Hop-by-Hop-Kette), ICMPv4/v6, TCP (optionsbewusste Payload-Offsets) und UDP ab. Fehlerhafte oder abgeschnittene Frames werden diagnostiziert, anstatt die Erfassung zum Absturz zu bringen, unbekannte Protokolle beenden die Kette sauber, und eine 16-Schichten-Obergrenze verhindert, dass manipulierte Extension-Header-Stapel verstärkt werden — die Erfassung übersteht, was auch immer das Netzwerk liefert.
Installation
pipx install rootwire # oder: uv tool install rootwire
Oder aus einem Klon mit uv ausführen:
git clone https://github.com/EONRaider/RootWire.git
cd RootWire
uv sync
Verwendung
rootwire [-h] [-i INTERFACE] [-r FILE] [-w FILE] [--json] [-d] [--version]
options:
-i, --interface Schnittstelle, von der Frames erfasst werden (Standard: alle Schnittstellen)
-r, --read FILE Frames aus einer klassischen pcap-Datei abspielen statt Live-
Erfassung (keine Privilegien erforderlich)
-w, --write FILE zusätzlich jeden erfassten Frame in eine klassische pcap-Datei schreiben
--json ein NDJSON-Objekt pro Frame auf stdout (Banner und
Statistiken bleiben auf stderr): direkt in jq pipen
-d, --data zusätzlich die rohe Payload jedes Frames anzeigen (wird mit --json ignoriert)
Erfassungsstatistiken — Frames, Bytes, Frames/s, fehlerhafte/abgeschnittene Zähler, Aufschlüsselung nach Protokoll — werden auf stderr gemeldet, wenn die Erfassung endet. Einige beliebte Kombinationen:
sudo rootwire -i eth0 -w session.pcap # erfassen und Beweise aufbewahren
rootwire -r session.pcap # später inspizieren, ohne root
rootwire -r session.pcap --json | jq . # maschinenlesbare Analyse
Live-Erfassung benötigt einen Raw-Socket, was unter Linux root bedeutet
(sudo rootwire -i eth0) oder das Gewähren der CAP_NET_RAW-Fähigkeit
für den Interpreter. Das Abspielen von Dateien mit -r benötigt niemals
Privilegien. Aus einem Klon ausführen als sudo .venv/bin/python -m rootwire.
So funktioniert es
capture.py liefert rohe Frames von einem AF_PACKET-Socket (oder
pcap.py spielt sie aus einer Datei ab — die beiden Quellen sind
austauschbar); decoder.py durchläuft die Protokollkette jedes Frames
in ein unveränderliches DecodedFrame; Ausgaben — der Bildschirm-Renderer,
der NDJSON-Stream, der pcap-Schreiber, der Statistik-Sammler — konsumieren
jeden Frame über eine kleine Output-Schnittstelle. Die vollständige
Tour, einschließlich warum der Speicher bei langen Erfassungen flach
bleibt und wie man eine Ausgabe hinzufügt, findet sich in
ARCHITECTURE.md.
Alles außer dem Raw-Socket läuft auf jedem Betriebssystem, sodass die Testsuite — die einen Korpus aus 65 Frames real erfassten Verkehrs enthält, der durch die gesamte Pipeline abgespielt wird — weder root noch Linux benötigt:
uv run pytest
Roadmap
- BPF-Filterung (Kernel-seitige Erfassungsfilter)
- Kernel-Zeitstempel (
SO_TIMESTAMPNS) und SIGTERM-saubere Dienstnutzung - Prüfsummen-Verifizierungsdarstellung (die Bibliothek berechnet sie bereits)
Rechtlicher Haftungsausschluss
Die Verwendung des in diesem Repository enthaltenen Codes, sei es teilweise oder in seiner Gesamtheit, zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Es liegt in der Verantwortung des Endbenutzers, alle geltenden lokalen, staatlichen und bundesstaatlichen Gesetze zu befolgen.
Die Entwickler übernehmen keine Haftung und sind nicht verantwortlich für Missbrauch oder Schäden, die durch irgendeinen Code in diesem Repository verursacht werden, falls er — versehentlich oder anderweitig — von einem Bedrohungsakteur oder einer unbefugten Entität genutzt wird, um die Sicherheit, Privatsphäre, Vertraulichkeit, Integrität und/oder Verfügbarkeit von Systemen und ihren zugehörigen Ressourcen zu gefährden. In diesem Kontext wird der Begriff „Gefährdung" fortan als die Ausnutzung bekannter oder unbekannter Schwachstellen in besagten Systemen verstanden, einschließlich, aber nicht beschränkt auf, die Implementierung von Sicherheitskontrollen, ob menschlich oder elektronisch ermöglicht.
Die Verwendung dieses Codes wird von den Entwicklern nur in jenen Umständen befürwortet, die direkt mit Bildungsumgebungen oder autorisierten Penetrationstest-Einsätzen zusammenhängen, deren erklärter Zweck es ist, Schwachstellen in Systemen zu finden und zu beheben, um deren Exposition gegenüber Gefährdungen und Exploits zu begrenzen, die von böswilligen Akteuren gemäß ihren jeweiligen Bedrohungsmodellen eingesetzt werden.