一个面向 GNU/Linux 的网络流量监控工具。数据帧通过原始套接字从网络接口捕获,使用 NETProtocols 库逐层解码,并实时渲染到屏幕上:
[>] 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
解码是选项感知的(遵循 IPv4 IHL 和 TCP 数据偏移),畸形或截断的数据帧会被诊断出来而不会导致捕获崩溃;未知协议会优雅地结束解码链——无论网络传输何种数据,捕获都能继续运行。
pipx install "git+https://github.com/EONRaider/Packet-Sniffer.git"
(也可以使用 uv tool install 并指定相同的 URL。该应用尚未以此名称发布到 PyPI——首次发布将留待其即将到来的更名。)
或者使用 uv 从克隆的仓库运行:
git clone https://github.com/EONRaider/Packet-Sniffer.git
cd Packet-Sniffer
uv sync
packet-sniffer [-h] [-i INTERFACE] [-d] [--version]
options:
-i, --interface interface to capture frames from (default: all interfaces)
-d, --data also display each frame's raw payload
捕获需要原始套接字,在 Linux 上这意味着要么使用 root 权限:
sudo packet-sniffer -i eth0
……要么为解释器授予 CAP_NET_RAW 能力。若从克隆的仓库运行,请使用 sudo .venv/bin/python -m packet_sniffer。
capture.py 从 AF_PACKET 套接字产生原始数据帧;decoder.py 遍历每个帧的协议链(Ethernet → ARP / IPv4 / IPv6 → ICMP / TCP / UDP),将其转换为不可变的 DecodedFrame;output.py 中的渲染器根据解码后的层类型进行分派。完整介绍——包括长时间捕获期间内存为何保持平稳,以及如何添加渲染器——见 ARCHITECTURE.md。
除原始套接字外,一切都能在任何操作系统上运行,因此测试套件(对录制帧进行解码和渲染)既不需要 root 权限,也不需要 Linux:
uv run pytest
SO_TIMESTAMPNS)使用本仓库中包含的代码(无论是部分还是全部)在未经事先双方同意的情况下攻击目标是非法的。遵守所有适用的地方、州和联邦法律是最终用户的责任。
如果本仓库中的任何代码在任何情况下(无论有意还是无意)被威胁行为者或未经授权的实体用作破坏系统及其相关资源的安全性、隐私性、机密性、完整性和/或可用性的手段,开发人员不承担任何责任,也不对由此造成的误用或损害负责。在此语境下,“破坏”(compromise)一词应理解为对所述系统中已知或未知漏洞的利用,包括但不限于对安全控制措施的利用,无论这些措施是由人工还是电子方式实现的。
只有在与教育环境或授权渗透测试项目直接相关的情况下,开发人员才认可使用此代码;这些项目的既定目的是发现并缓解系统中的漏洞,减少其遭受恶意代理(如各自威胁模型中所定义)所采用的破坏和利用手段的风险。