
Packet-Sniffer v4.0.0
基于原始套接字的网络数据包嗅探器,可从网络接口捕获并解析 TCP/IP 数据包,用于安全分析与教学用途。
RootWire
一个面向 GNU/Linux 的网络流量监视器 — 旧称 Packet-Sniffer。数据帧通过原始套接字从网络接口捕获,使用 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: 20 bytes
解码器覆盖 Ethernet、ARP、IPv4(选项与分片)、IPv6 包括扩展头(MLD 报告会渲染其完整的 Hop-by-Hop 链)、ICMPv4/v6、TCP(感知选项的载荷偏移)和 UDP。格式错误或截断的数据帧会被诊断而非导致捕获崩溃,未知协议会优雅地终止协议链,16 层上限可防止精心构造的扩展头栈造成放大效应 — 无论网络交付什么,捕获过程都能存活。
安装
pipx install rootwire # 或: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] [--json] [-d] [--version]
options:
-i, --interface 用于捕获数据帧的接口(默认:所有接口)
-r, --read FILE 从经典 pcap 文件重放数据帧,而非实时捕获(无需特权)
-w, --write FILE 同时将每个捕获的数据帧写入经典 pcap 文件
--json 每个数据帧在 stdout 输出一个 NDJSON 对象(横幅和统计信息保留在 stderr):可直接管道输入 jq
-d, --data 同时显示每个数据帧的原始载荷(与 --json 一起使用时忽略)
捕获统计信息 — 数据帧数、字节数、帧/秒、格式错误/截断计数、各协议统计 — 会在捕获结束时报告到 stderr。一些常用组合:
sudo rootwire -i eth0 -w session.pcap # 捕获并保留证据
rootwire -r session.pcap # 稍后检查,无需 root
rootwire -r session.pcap --json | jq . # 机器可读的分析
实时捕获需要原始套接字,在 Linux 上意味着需要 root(sudo rootwire -i eth0)或为解释器授予 CAP_NET_RAW 能力。使用 -r 重放文件永远不需要特权。从克隆仓库运行时,使用 sudo .venv/bin/python -m rootwire 执行。
工作原理
capture.py 从 AF_PACKET 套接字产出原始数据帧(或由 pcap.py 从文件重放 — 两种来源可互换);decoder.py 将每个数据帧的协议链解析为不可变的 DecodedFrame;输出端 — 屏幕渲染器、NDJSON 流、pcap 写入器、统计收集器 — 通过一个精简的 Output 接口消费每个数据帧。完整介绍(包括长时间捕获期间内存为何保持平稳,以及如何添加输出端)见 ARCHITECTURE.md。
除原始套接字外的一切都可在任何操作系统上运行,因此测试套件 — 包含 65 个真实捕获流量数据帧组成的语料库,通过整个管道重放 — 既不需要 root 也不需要 Linux:
uv run pytest
路线图
- BPF 过滤(内核侧捕获过滤器)
- 内核时间戳(
SO_TIMESTAMPNS)及 SIGTERM 干净的服务使用 - 校验和验证渲染(该库已能计算校验和)
法律免责声明
使用本仓库中包含的代码(无论是部分还是全部)在未经事先双方同意的情况下攻击目标属于违法行为。最终用户有责任遵守所有适用的地方、州和联邦法律。
开发者不承担任何责任,并且不对本仓库中任何代码的误用或造成的损害负责,无论该代码是意外还是以其他方式被威胁行为者或未经授权的实体利用,以破坏系统的安全性、隐私性、机密性、完整性和/或可用性及其相关资源。在此语境下,“破坏”一词应理解为利用所述系统中已知或未知的漏洞,包括但不限于安全控制的实施(无论由人工还是电子方式启用)。
开发者仅在以下直接相关的情况下认可使用本代码:教育环境或经授权的渗透测试项目,其声明目的是发现并缓解系统中的漏洞,限制其遭受恶意代理(如其各自威胁模型中所定义)所采用的破坏和利用手段的暴露。