
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 Netzwerkverkehrsmonitor für GNU/Linux — früher bekannt als Packet-Sniffer. Frames werden von einer oder mehreren Netzwerkschnittstellen über einen Raw Socket erfasst, vom Kernel selbst mit Zeitstempeln versehen, Schicht für Schicht mit der NETProtocols-Bibliothek dekodiert und live dargestellt, in pcap mit Nanosekundenpräzision 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: Maximum Segment Size (1460), SACK Permitted, Timestamps (3644437524, 0), No-Operation, Window Scale (7)
Der Decoder deckt Ethernet ab (802.1Q-VLAN-Tags, einschließlich
verschachtelter QinQ-Tagging), ARP, IPv4 (dekodierte Optionen und
Fragmente), IPv6 einschließlich Erweiterungs-Header (ein MLD-Report
gibt seine vollständige Hop-by-Hop-Kette aus) und Neighbor Discovery
(eine Router-/Neighbor-Solicitation oder -Advertisement zeigt ihre
Zieladresse und Link-Layer-Optionen), ICMPv4/v6, TCP (optionsbewusste
Payload-Offsets, dekodierte Optionen) und UDP. Jede
IPv4/ICMPv4/ICMPv6/TCP/UDP-Prüfsumme wird gegen eine Neuberechnung
verifiziert und eine Abweichung inline markiert
(Checksum: 0x0000 [!] mismatch (expected 0x1a2b)) — ein echtes Signal
für korrupten oder gespooften Verkehr, still bei einem nicht
reassemblierten Fragment, bei dem die Wire-Prüfsumme ein Datagramm
abdeckt, das RootWire nie neu zusammensetzt. Fehlerhafte oder
abgeschnittene Frames werden diagnostiziert, anstatt die Erfassung zum
Absturz zu bringen, unbekannte Protokolle beenden die Kette sauber, und
eine Obergrenze von 16 Schichten verhindert, dass konstruierte
Erweiterungs-Header-Stapel sich verstärken — die Erfassung übersteht,
was auch immer das Netzwerk liefert.
Installation
pipx install rootwire # or: 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]
[--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)
Erfassungsstatistiken — Frames, Bytes, Frames/s, Zählungen
fehlerhafter/abgeschnittener Frames, Zählungen pro Protokoll — werden
auf stderr gemeldet, wenn die Erfassung endet, sei es durch Ctrl-C,
SIGTERM oder (bei -r) das Dateiende: Alle drei lösen dasselbe
saubere Herunterfahren aus. Einige beliebte Kombinationen:
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
Live-Erfassung benötigt einen Raw Socket, was unter Linux root bedeutet
(sudo rootwire -i eth0) oder dem Interpreter die CAP_NET_RAW-Capability
zu gewähren. Das Wiedergeben von Dateien mit -r benötigt nie
Privilegien. Aus einem Klon heraus führen Sie es als
sudo .venv/bin/python -m rootwire aus.
Funktionsweise
capture.pys capture_async() liefert rohe Frames — zusammengeführt
aus einem AF_PACKET-Socket pro Schnittstelle, jeder vom Kernel selbst
bei Ankunft mit einem Zeitstempel versehen (SO_TIMESTAMPNS, kein
Userspace-Uhrzeitlesevorgang) — als (bytes, timestamp, interface)-Tripel;
das Wiedergeben aus einer Datei mit -r passt die Frames von pcap.py
an dieselbe Form an, bevor eine der beiden Quellen decoder.py
erreicht, das die Protokollkette jedes Frames in ein unveränderliches
DecodedFrame überführt. Ausgaben — der Bildschirm-Renderer, der
NDJSON-Stream, der pcap-Writer, der Statistik-Sammler — konsumieren
jeden Frame über eine kleine Output-Schnittstelle. Die vollständige
Tour, einschließlich der Frage, warum der Speicher während langer
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 Test-Suite — die einen Korpus von 65 Frames echten erfassten Verkehrs enthält, der durch die gesamte Pipeline wiedergegeben wird — weder root noch Linux benötigt:
uv run pytest
Mitwirken
Fehlerberichte und Pull Requests sind willkommen. CONTRIBUTING.md behandelt die Entwicklungsumgebung, die von CI ausgeführten Prüfungen und wie ein guter Pull Request hier aussieht.
Rechtlicher Haftungsausschluss
Die Verwendung von Code, der in diesem Repository enthalten ist, sei es teilweise oder in seiner Gesamtheit, zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Es liegt in der Verantwortung des Endnutzers, 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 jeglichen in diesem Repository enthaltenen Code verursacht werden, falls dieser, ob versehentlich oder anderweitig, von einem Bedrohungsakteur oder einer nicht autorisierten Entität als Mittel eingesetzt wird, um die Sicherheit, Privatsphäre, Vertraulichkeit, Integrität und/oder Verfügbarkeit von Systemen und ihren zugehörigen Ressourcen zu kompromittieren. In diesem Zusammenhang wird der Begriff „kompromittieren“ fortan als die Ausnutzung bekannter oder unbekannter Schwachstellen in besagten Systemen verstanden, einschließlich, aber nicht beschränkt auf die Implementierung von Sicherheitskontrollen, seien sie menschlich oder elektronisch ermöglicht.