Zurück zu den Updates
New releaseAug 22, 2026

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.

Teilen

RootWire

CodeFactor CI PyPI Python Version OS License

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.

Kategorien