返回更新列表
新发布Aug 22, 2026

Packet-Sniffer v4.0.0

基于原始套接字的网络数据包嗅探器,可从网络接口捕获并解析 TCP/IP 数据包,用于安全分析与教学用途。

分享

RootWire

CodeFactor CI PyPI Python Version OS License

一款面向 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: Maximum Segment Size (1460), SACK Permitted, Timestamps (3644437524, 0), No-Operation, Window Scale (7)

解码器覆盖 Ethernet(802.1Q VLAN 标签,包括嵌套的 QinQ 标签)、ARP、IPv4(解码选项与分片)、IPv6 包括扩展头(一份 MLD 报告会渲染其完整的 逐跳链)以及 邻居发现(路由器/邻居 请求或通告会显示其目标地址与链路层 选项)、ICMPv4/v6、TCP(感知选项的载荷偏移、解码 选项)和 UDP。每个 IPv4/ICMPv4/ICMPv6/TCP/UDP 校验和都会 与重新计算的结果进行比对验证,不匹配时会在行内标记 (Checksum: 0x0000 [!] mismatch (expected 0x1a2b))—— 这对 损坏或被伪造的流量是一个真实信号,而对未重组的 分片则保持静默,因为线路上的校验和覆盖的是 RootWire 从不 重建的数据报。畸形或截断的帧会被诊断,而不是让捕获 崩溃;未知协议会优雅地终止协议链;16 层上限可防止精心构造的 扩展头堆叠造成放大 —— 无论网络送来什么,捕获都能存活。

安装

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

实时捕获需要原始套接字,在 Linux 上这意味着 root (sudo rootwire -i eth0)或授予解释器 CAP_NET_RAW 能力。使用 -r 回放文件从不需要 特权。从克隆的仓库运行时,以 sudo .venv/bin/python -m rootwire 运行。

工作原理

capture.py 的 capture_async() 产出原始帧 —— 从每个接口的 一个 AF_PACKET 套接字合并而来,每个帧都由内核 在到达时自身打上时间戳(SO_TIMESTAMPNS,而非用户空间时钟读取)—— 以 (bytes, timestamp, interface) 三元组的形式;使用 -r 从文件回放时, 会将 pcap.py 的帧适配 成相同的形状,然后任一来源都会到达 decoder.py,它 将每个帧的协议链遍历为一个不可变的 DecodedFrame。 输出端 —— 屏幕渲染器、NDJSON 流、pcap 写入器、 统计收集器 —— 都通过一个小的 Output 接口消费每个帧。完整导览,包括为何在长时间 捕获期间内存保持平稳,以及如何添加一个输出,见 ARCHITECTURE.md。

除原始套接字外,所有内容都可在任何操作系统上运行,因此测试套件 —— 其中包含一个由 65 帧真实捕获流量组成的语料库,通过整个 流水线回放 —— 既不需要 root 也不需要 Linux:

uv run pytest

贡献

欢迎提交错误报告和拉取请求。CONTRIBUTING.md 涵盖了开发环境设置、CI 运行的检查,以及在这里 什么样的拉取请求才算好。

法律免责声明

使用本仓库中包含的代码,无论是部分还是 全部,用于未经事先相互同意的情况下攻击目标,都是 非法的。遵守所有适用的 地方、州和联邦法律是最终用户的责任。

开发者不承担任何责任,对于本仓库中包含的任何代码 在任何情况下(无论是意外还是其他情况)被威胁行为者或未经授权的实体 用作破坏系统及其相关资源的安全性、隐私性、机密性、完整性和/或可用性的手段 所造成的误用或损害,开发者概不负责。在此语境下, 术语“破坏”此后应理解为利用 所述系统中存在的已知或未知漏洞,包括但不限于 安全控制的实现,无论是人为还是 电子方式启用的。

开发者仅在那些直接与教育环境或 授权的渗透测试工作相关的情况下认可使用此代码,这些工作的声明目的是 发现和缓解系统中的漏洞,限制 其暴露于恶意行为者根据其各自威胁模型所采用的破坏和利用手段。

许可证

AGPL-3.0

分类