
कच्चे सॉकेट-आधारित नेटवर्क पैकेट स्निफर जो सुरक्षा विश्लेषण और शैक्षिक उपयोग के लिए नेटवर्क इंटरफेस से TCP/IP पैकेटों को कैप्चर और डिसअसेंबल करता है।
GNU/Linux के लिए एक नेटवर्क ट्रैफ़िक मॉनिटर — जिसे पहले Packet-Sniffer के नाम से जाना जाता था। फ़्रेम एक या अधिक नेटवर्क इंटरफ़ेस से raw socket के माध्यम से कैप्चर किए जाते हैं, kernel द्वारा स्वयं टाइमस्टैम्प किए जाते हैं, NETProtocols लाइब्रेरी के साथ परत-दर-परत डिकोड किए जाते हैं, और लाइव रेंडर किए जाते हैं, नैनोसेकंड-सटीकता वाले pcap में लिखे जाते हैं, या 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)
डिकोडर में Ethernet (802.1Q VLAN टैग, जिसमें नेस्टेड QinQ टैगिंग भी शामिल है), ARP, IPv4 (डिकोड किए गए options और fragments), IPv6 जिसमें extension headers भी शामिल हैं (एक MLD रिपोर्ट अपनी पूरी Hop-by-Hop श्रृंखला प्रदर्शित करती है) और Neighbor Discovery (एक Router/Neighbor Solicitation या Advertisement अपना target address और link-layer options दिखाता है), ICMPv4/v6, TCP (options-aware payload offsets, डिकोड किए गए options) और UDP शामिल हैं। प्रत्येक IPv4/ICMPv4/ICMPv6/TCP/UDP checksum को पुनर्गणना के विरुद्ध सत्यापित किया जाता है, और बेमेल होने पर इनलाइन फ़्लैग किया जाता है
(Checksum: 0x0000 [!] mismatch (expected 0x1a2b)) — यह भ्रष्ट या स्पूफ़ किए गए ट्रैफ़िक के लिए एक वास्तविक संकेत है, और एक गैर-पुनर्संयोजित fragment के लिए मौन रहता है, जहाँ wire checksum उस datagram को कवर करता है जिसे RootWire कभी पुनर्निर्मित नहीं करता। विकृत या कटे-फटे फ़्रेम का निदान किया जाता है बजाय कैप्चर को क्रैश करने के, अज्ञात प्रोटोकॉल श्रृंखला को शालीनता से समाप्त करते हैं, और एक 16-परत की सीमा तैयार किए गए extension-header स्टैक को बढ़ने से रोकती है —
कैप्चर नेटवर्क जो भी पहुँचाता है उससे बच निकलता है।
pipx install rootwire # or: uv tool install rootwire
या 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)
कैप्चर आँकड़े — फ़्रेम, बाइट्स, फ़्रेम/सेकंड, विकृत/कटे-फटे की गिनती, प्रति-प्रोटोकॉल गणना — कैप्चर समाप्त होने पर stderr पर रिपोर्ट किए जाते हैं, चाहे वह Ctrl-C हो, SIGTERM हो, या (-r के लिए) फ़ाइल का अंत हो: तीनों समान स्वच्छ शटडाउन को ट्रिगर करते हैं। कुछ पसंदीदा संयोजन:
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
लाइव कैप्चर के लिए एक raw socket की आवश्यकता होती है, जिसका Linux पर अर्थ है root
(sudo rootwire -i eth0) या इंटरप्रेटर को CAP_NET_RAW क्षमता प्रदान करना। -r के साथ फ़ाइलों को रीप्ले करने के लिए कभी विशेषाधिकारों की आवश्यकता नहीं होती। एक क्लोन से, इसे sudo .venv/bin/python -m rootwire के रूप में चलाएँ।
capture.py का capture_async() कच्चे फ़्रेम देता है — प्रति इंटरफ़ेस एक AF_PACKET socket से मर्ज किए गए, प्रत्येक आगमन पर kernel द्वारा स्वयं टाइमस्टैम्प किए गए (SO_TIMESTAMPNS, न कि userspace घड़ी की रीडिंग) — (bytes, timestamp, interface) ट्रिपल के रूप में; -r के साथ फ़ाइल से रीप्ले करना pcap.py के फ़्रेम को उसी आकार में अनुकूलित करता है इससे पहले कि कोई भी स्रोत decoder.py तक पहुँचे, जो प्रत्येक फ़्रेम की प्रोटोकॉल श्रृंखला को एक अपरिवर्तनीय DecodedFrame में परिवर्तित करता है। आउटपुट — स्क्रीन रेंडरर, NDJSON स्ट्रीम, pcap राइटर, सांख्यिकी संग्राहक — एक छोटे Output इंटरफ़ेस के माध्यम से प्रत्येक फ़्रेम का उपभोग करते हैं। पूरा दौरा, जिसमें यह भी शामिल है कि लंबे कैप्चर के दौरान मेमोरी क्यों स्थिर रहती है और आउटपुट कैसे जोड़ें, ARCHITECTURE.md में है।
raw socket के अलावा सब कुछ किसी भी OS पर चलता है, इसलिए टेस्ट सूट — जिसमें वास्तविक कैप्चर किए गए ट्रैफ़िक का 65-फ़्रेम कॉर्पस पूरी पाइपलाइन के माध्यम से रीप्ले किया जाता है — को न तो root और न ही Linux की आवश्यकता होती है:
uv run pytest
बग रिपोर्ट और pull requests का स्वागत है। CONTRIBUTING.md में डेवलपमेंट सेटअप, CI द्वारा चलाए जाने वाले चेक, और यहाँ एक अच्छा pull request कैसा दिखता है, शामिल है।
इस रिपॉज़िटरी में निहित कोड का उपयोग, आंशिक रूप से या पूर्ण रूप से, पूर्व पारस्परिक सहमति के बिना लक्ष्यों को शामिल करने के लिए अवैध है। सभी लागू स्थानीय, राज्य और संघीय कानूनों का पालन करना अंतिम उपयोगकर्ता की ज़िम्मेदारी है।
डेवलपर्स कोई दायित्व नहीं मानते हैं और किसी भी घटना में इस रिपॉज़िटरी में निहित किसी भी कोड के दुरुपयोग या क्षति के लिए ज़िम्मेदार नहीं हैं, जब वह आकस्मिक रूप से या अन्यथा, किसी खतरे के एजेंट या अनधिकृत इकाई द्वारा सिस्टम और उनके संबंधित संसाधनों की सुरक्षा, गोपनीयता, गोपनीयता, अखंडता, और/या उपलब्धता से समझौता करने के साधन के रूप में उपयोग किया जाता है। इस संदर्भ में "समझौता" शब्द को आगे उन सिस्टमों में मौजूद ज्ञात या अज्ञात कमज़ोरियों के शोषण के लाभ के रूप में समझा जाता है, जिसमें सुरक्षा नियंत्रणों का कार्यान्वयन शामिल है, चाहे मानव- या इलेक्ट्रॉनिक-सक्षम हो।
इस कोड का उपयोग डेवलपर्स द्वारा केवल उन परिस्थितियों में समर्थित है जो सीधे शैक्षिक वातावरण या अधिकृत प्रवेश परीक्षण जुड़ाव से संबंधित हैं जिनका घोषित उद्देश्य सिस्टम में कमज़ोरियों को खोजना और कम करना है, उनके संपर्क को उनके संबंधित खतरे के मॉडल में परिभाषित दुर्भावनापूर्ण एजेंटों द्वारा नियोजित समझौतों और शोषणों तक सीमित करना है।