kazim-45/NETSPY

GitHub: kazim-45/NETSPY

基于 Scapy 和 Flask 的实时网络数据包嗅探器,通过浏览器仪表盘可视化展示流量协议分布、数据包详情和可疑活动告警。

Stars: 1 | Forks: 0

# NetSpy 🌐 **基于浏览器的实时网络数据包嗅探器仪表盘。** 使用 Scapy 从你的网络接口捕获数据包,实时进行解析,并将结果流式传输到浏览器中的深色主题仪表盘 —— 包括协议细分、主要攻击 IP、每秒数据包时间线,以及带有颜色编码危险级别的实时滚动数据包表。 ``` sudo netspy → http://127.0.0.1:5000 ``` ![显示实时数据包捕获的 NetSpy 仪表盘,包括协议环形图、时间线迷你图和颜色编码的数据包表] ## 安装说明 ``` git clone https://github.com/kazim-45/netspy.git cd netspy pip install -e . ``` 在 Linux/macOS 上捕获数据包需要 root 权限(Scapy 需要访问原始套接字)。 ## 使用方法 ``` # 启动 dashboard(自动打开浏览器) sudo netspy # 自定义 port sudo netspy --port 8080 # 在 local network 上 expose 以便其他设备查看 sudo netspy --host 0.0.0.0 # 不自动打开浏览器 sudo netspy --no-browser # 帮助 netspy --help ``` 然后在浏览器中: 1. 从下拉菜单中选择一个网络接口(或留空以自动检测) 2. 可选输入 BPF 过滤器 —— 例如 `tcp port 443` 或 `host 192.168.1.1` 3. 按下 **▶ START** —— 数据包将实时流入 4. 使用过滤按钮可专注于 TCP / UDP / DNS / HTTP 或可疑流量 5. 在搜索框中按 IP、端口或关键字进行搜索 ## 界面说明 **侧边栏 —— 实时计数器** - 已捕获的数据包总数和字节数 - 各协议细分:TCP、UDP、DNS、ICMP、ARP - 发送流量最多的前 5 个源 IP - 流量目标最多的前 5 个目的 IP - 按端口统计的前 8 个服务(HTTP、HTTPS、DNS、SSH 等) **图表行** - 协议环形图 —— 按类型直观划分流量,每秒更新一次 - 每秒数据包迷你图 —— 过去 60 秒的流量波动 **数据包表** - 每个捕获的数据包:时间、协议标签、源地址、目标地址、长度、信息 - 按危险级别进行颜色编码:🔴 危险(Telnet、RDP),🟡 警告(SSH 尝试),正常 - 过滤器:ALL / TCP / UDP / DNS / HTTP / HTTPS / ICMP / ARP / ⚠ SUSPICIOUS - 搜索框:按 IP 地址、端口号或任意信息字符串进行过滤 - 随数据包到达自动滚动;当你向上滚动时停止自动滚动 ## BPF 过滤器示例 BPF(Berkeley Packet Filter)是用于过滤捕获流量的标准语法。在按下 START 之前,将这些内容输入到过滤框中: | 过滤器 | 捕获内容 | |---|---| | `tcp port 80` | 仅 HTTP 流量 | | `tcp port 443` | 仅 HTTPS 流量 | | `host 8.8.8.8` | 与 Google DNS 之间的流量 | | `src net 192.168.1.0/24` | 来自你局域网的所有流量 | | `icmp` | 仅 Ping 流量 | | `not port 22` | 除 SSH 外的所有流量 | | `udp port 53` | 仅 DNS 查询 | ## 检测内容与颜色编码说明 | 级别 | 颜色 | 示例 | |---|---|---| | 危险 | 红色 | Telnet (端口 23) —— 明文凭证,RDP (3389) | | 警告 | 黄色 | SSH 连接尝试(无 ACK 的 SYN),SMB (445) | | 信息 | 蓝色 | ICMP ping,ARP 请求 | | 正常 | 青色 | HTTP、HTTPS、DNS、标准 TCP/UDP | ## 运行原理 NetSpy 同时运行两项任务: **捕获线程** —— Scapy 的 `sniff()` 在后台线程中运行,为每个数据包调用一次回调函数。该回调将数据包解析为结构化的 dict(协议、IP、端口、标志、信息字符串、危险级别),并将其追加到一个限制最多 500 个数据包的线程安全环形缓冲区中。 **Flask 服务器** —— 提供仪表盘 HTML 并公开 JSON API。浏览器每秒轮询一次 `/api/packets?since=N`,仅获取它尚未看到过的数据包。它还会轮询 `/api/stats` 以获取侧边栏计数器和时间线数据。 这种设计意味着捕获引擎和 Web UI 是完全解耦的 —— 嗅探器永远不会等待浏览器,浏览器也绝不会阻塞嗅探器。 ## 支持的协议 TCP、UDP、ICMP、ARP、DNS、HTTP、HTTPS、SSH、FTP、SMTP、Telnet、RDP、SMB、MySQL、PostgreSQL、Redis、MongoDB —— 通过端口号自动识别,并附带易于理解的标签。 ## 项目结构 ``` netspy/ ├── netspy_pkg/ │ ├── __init__.py │ ├── capture.py ← Scapy sniffer, packet parser, ring buffer │ ├── app.py ← Flask routes and JSON API │ └── cli.py ← netspy command entry point ├── templates/ │ └── dashboard.html ← single-file dashboard (HTML + CSS + JS) ├── pyproject.toml ├── requirements.txt └── README.md ``` ## 依赖项 - [`scapy`](https://scapy.net/) —— 数据包捕获与解析 - [`flask`](https://flask.palletsprojects.com/) —— Web 服务器与 API - [`rich`](https://pypi.org/project/rich/) —— 终端输出 ## 法律与道德使用声明 请仅在你拥有或获得明确授权监控的网络上捕获流量。在未经授权的情况下,在公共或企业网络上捕获流量在大多数国家都是非法的。请仅在你自己的机器或家庭实验室中使用 NetSpy。 ## 许可证 MIT —— 随意使用、分支并在此基础上进行构建。 *由 [kazim-45](https://github.com/kazim-45) 开发 —— 与 [MetaHunter](https://github.com/kazim-45/MetaHunter)、[MilkyWay-CTF](https://github.com/kazim-45/MilkyWay-CTF)、[PassAudit](https://github.com/kazim-45/passaudit) 和 [LogWatch](https://github.com/kazim-45/logwatch) 共同作为网络安全 CLI 工具包的一部分。*
标签:Python, Scapy, 后端开发, 无后门, 网络嗅探, 网络流量分析, 运维监控, 逆向工具, 防御绕过