ossianericson/netsentinel
GitHub: ossianericson/netsentinel
一款集网络设备发现、安全扫描、持续监控和故障诊断于一体的桌面工具,帮助用户识别流氓设备、检测异常行为并生成 ISP 问责报告。
Stars: 2 | Forks: 0
# NetSentinel
**关键词:** 网络扫描器, 流氓设备检测, STP 监视器, 广播风暴分析器, ARP 欺骗检测器, IoT 安全基线, DNS 宕机检测, ISP 问责报告, 网络健康评级, 端口扫描器, CVE 查询, Windows 网络工具, PyQt6, Npcap

[](https://winstall.app/apps/NetSentinel.NetSentinel)


## 安装
### Windows — 一行命令
```
winget install NetSentinel.NetSentinel
```
或者从最新发布版下载安装包:
### 👉 [最新发布版](https://github.com/ossianericson/netsentinel/releases/latest) — v1.5.7
| 操作系统 | 文件 | 运行方式 |
|---|---|---|
| **Windows** | `NetSentinel-Setup.exe` | 运行安装程序,然后右键点击快捷方式 → **以管理员身份运行** |
| **Windows** | `NetSentinel.exe` *(便携版)* | 右键点击 → **以管理员身份运行** |
| **macOS** | `NetSentinel-macOS.zip` | 解压 → 右键点击应用 → **打开** (首次启动绕过 Gatekeeper) |
| **Linux** | `NetSentinel` | `chmod +x NetSentinel && sudo ./NetSentinel` |
### 更新
如果您是通过 winget 安装的:
```
winget upgrade NetSentinel.NetSentinel
```
或者从[最新发布版](https://github.com/ossianericson/netsentinel/releases/latest)下载新的安装包。
### Windows 上首次运行 — 如果您直接下载了 .exe 文件
Windows 会将 internet 下载的文件标记为已阻止。**这不适用于 winget 安装。** 请在运行前取消阻止。
**选项 A — PowerShell (最快):**
```
Unblock-File -Path "$env:USERPROFILE\Downloads\NetSentinel.exe"
```
然后右键点击 → **以管理员身份运行**。
**选项 B — 文件资源管理器:**
1. 右键点击 `NetSentinel.exe` → **属性**
2. 在“常规”选项卡底部勾选**解除锁定**
3. 点击 **确定** → 右键点击 → **以管理员身份运行**
**SmartScreen 警告 ("Windows 已保护你的电脑")?**
点击**更多信息** → **仍要运行**。请在发布页面核对文件的 SHA-256 哈希值。
## 为什么会有 NetSentinel
现代家庭网络存在一个隐藏的问题:mesh 路由器、智能音箱和 IoT 设备现在正默默地参与**企业级二层协议**——STP、IPv6 RA、mDNS——而用户对此毫无察觉。通过以太网连接的 Google Nest 节点可能会赢得 STP 根网桥选举,并迫使您的真实路由器每 30 秒阻塞其自己的上行链路端口。结果是:出现那种每个 ISP 服务台都将其视为“WiFi 干扰”而打发的间歇性断网和 DNS 故障。
同时,诊断真正的 ISP 宕机需要五个互不通信且无法产生可提交给支持技术员的证据的独立工具。
NetSentinel 是这样一个单一工具,它可以:
- **识别**每一台设备——IP、主机名、MAC、厂商、型号(例如 "Google Nest Audio"、"TP-Link Deco M5")、设备类型和风险等级
- **证明**网络中断的发生,附带可附加到 ISP 支持工单的带时间戳的 CSV 日志
- **生成 ISP 问责报告**——MTR 跃点表、丢包率 %、DNS 延迟、宕机日志——专为支持升级格式化
- **为您的网络打分** A–F 等级,涵盖在线时间、延迟、抖动、DNS 速度、下载速度、设备安全性、STP 健康状况和广播风暴级别
- **找出二层元凶**——流氓根网桥、广播风暴、隐藏 SSID、ARP 欺骗
- **监控 IoT 行为**——了解每个设备的正常行为,并在智能设备开始表现得像受损主机时发出警报
- **持续跟踪可用性**——后台监视器每 60 秒将每个设备的 UP/DEGRADED/DOWN 状态记录到本地 SQLite 数据库,并保留完整的事件历史记录
- **100% 本地运行**——没有云账号、没有遥测、数据不会发送到任何地方
## 核心功能
### 标准选项卡(无需管理员权限)
| 选项卡 | 功能说明 |
|---|---|
| 📌 **固定 (快捷访问)** | 启动时始终打开的顶级部分——概述、DNS 与宕机、实时带宽、速度测试、网络上的设备、可用性历史、活动连接。一键即时访问,无需展开任何子组。 |
| 🏠 **概述仪表板** | 可配置的实时磁贴仪表板——设备数量、全网在线时间、服务状态、TLS 健康、RTT 摘要、网络评级、警报订阅、设备事件。在“编辑布局”模式下拖动磁贴可重新排序;布局可在会话间保持。 |
| 🔍 **网络上的设备** | 子网上的每一台设备——IP、主机名、MAC、厂商、**设备型号**(例如 "Google Nest Audio"、"TP-Link Deco M5")、设备类型和风险等级。右键点击任何设备可获取 **🔧 修复指南**。 |
| 📶 **WiFi 网络** | 隐藏的 SSID、流氓接入点、同频干扰、启用了 WPS 的网络、已连接的客户端列表。 |
| 📡 **DNS 与宕机** | 实时 ping + DNS 延迟图。实时识别 STP 重新收敛特征和 DNS 劫持模式。 |
| 🗓 **可用性历史** | 持久的 RTT 和 UP/DEGRADED/DOWN 状态图表,支持 1h / 12h / 24h / 7d 缩放。由后台监视器每 60 秒自动记录——无需手动操作。 |
| 📜 **资产变更** | 记录每个设备的 JOINED、LEFT、UP、DOWN、DEGRADED 和 RECOVERED 事件的完整日志,具有严重性过滤和 1h–30d 缩放功能。 |
| ⏱ **在线时间与 SLA** | 针对每个设备的 24h / 7d / 30d 在线时间百分比。全网平均值,最佳/最差设备 KPI 磁贴。颜色编码行(绿色 ≥99%,琥珀色 ≥95%,红色 <95%)。 |
| 🔌 **服务心跳** | 每个已配置服务每 60 秒进行一次 TCP 端口可达性检查。带有冷却时间的 SERVICE_DOWN 警报。KPI 磁贴和逐服务 RTT 列。 |
| 📄 **自动报告** | 以可配置的间隔和输出目录生成 HTML 状态报告。涵盖设备在线时间、TLS 证书、服务和设备事件。“立即生成”按钮;自动修剪以保留最近 N 份报告。 |
| 🌐 **我的网络信息** | 完整快照:本地 IP、子网、网关、DNS 服务器、DHCP 租约、适配器速度、WiFi 信号。一键访问 OS 设置快捷方式和路由器管理链接。 |
| 📊 **网络评级** | 与“完美家庭网络”基线相比的 **A–F 基准测试**,涵盖 8 个维度。包括 **📊 生成 ISP 报告**——导出用于支持工单的 HTML 文档。 |
| 💊 **健康检查** | 按需诊断:对 5 个目标进行 ping,DNS 速度比较 (系统 / Cloudflare / Google / Quad9),HTTP 检查,DNS 泄漏测试,公网 IP,下载速度测试,路由跟踪。 |
| 📋 **稳定性日志** | 无人值守运行数小时或数天。每个 ping、宕机、DNS 延迟和 ARP 更改的带时间戳的 CSV 日志。加载任何过去的日志以进行自动化的纯英语分析。可用于 ISP 争议的证据级输出。 |
| 🔷 **IPv6 设备** | 链路本地网段扫描——读取 OS 邻居缓存并对每个 `fe80::/10` 地址执行 ping。 |
| 🔍 **根本原因分析** | 交叉关联 STP、风暴、诊断和日志数据。自动区分本地网络故障和 ISP 基础设施问题。 |
| ⚡ **广播风暴** | 测量暗中阻塞带宽的广播/多播泛洪级别。右键点击任何风暴源以获取缓解步骤。 |
| 🤖 **IoT 行为** | 了解每个 IoT 设备(摄像头、智能音箱、电视)的正常流量。当设备开始联系新服务器、扫描端口或泛洪流量时发出警报。 |
| 🌉 **流氓网桥 (STP)** | 捕获导致 15–45 秒周期性断网的隐藏原因:声称是网络根网桥的 mesh 节点或非托管交换机。右键点击任何流氓条目以获取逐步的断开说明。 |
| 🔔 **通知** | Toast、Webhook 和 Email 警报的逐渠道发送规则。每个渠道的最低严重性过滤器、规则类型允许列表、发送日志和测试按钮。 |
| 📸 **配置快照** | 整个设备群的即时快照,并在任意两个快照之间进行结构化差异比对——增加/移除的设备、端口更改、SNMP 偏移。 |
| 📈 **趋势预测** | 对存储的 RTT/丢包/抖动数据进行 OLS 回归,预测指标何时会突破阈值。ETA 列按 CRITICAL / WARNING / CLEAN 进行颜色编码。 |
| 🔧 **维护窗口** | 在定义的维护期间内抑制某个设备(或全网)的所有警报。抑制日志、自动刷新、过期窗口清除。 |
| ⚡ **自定义触发器** | 使用指标表达式语言编写自定义警报条件——例如 `avg(rtt["ip"], 5m) > 80 AND loss%["ip"] > 5`。可视化规则构建器带有实时纯英语预览、逐规则严重性和冷却时间。每个监视周期都会评估规则。 |
| 📶 **WiFi 热图** | 导入平面图图像,在您的空间内走动,收集每次扫描的信号强度读数。IDW 插值渲染出颜色编码的热图覆盖层,显示每个接入点的覆盖盲区。导出为 PNG。 |
| 🗺 **地理位置图** | 使用本地 MaxMind GeoLite2-City 数据库在离线世界地图上绘制面向 internet 的 IP——无需外部 API 调用,没有遥测。一键导入来自威胁情报阻止列表的结果。 |
### UI 与自定义
| 功能 | 详细信息 |
|---|---|
| ◆ **三模式渐进式导航** | 侧边栏在三种模式下运行,通过顶部的药丸按钮循环切换:**Home** (5 个要点 + 评级圆圈 + 近期警报),**Standard** (节标题下的完整扁平列表),以及 **Pro** (增加带有管理员徽章的安全审计项)。活动模式会在会话间保存。 |
| 🔒 **单实例守护** | 启动第二个 NetSentinel 副本将恢复并聚焦已运行的窗口,而不是打开一个重复的窗口。适用于最小化和隐藏到托盘的状态。 |
| 🔕 **启动警报预热** | 启动后的前 10 秒内会抑制网络警报,以防止在第一个监视周期完成之前出现虚假通知。 |
| 🔔 **任意点击恢复托盘** | 单击或双击托盘图标,或点击通知气泡,始终会恢复并聚焦主窗口。 |
| 🎨 **三种颜色主题** | Arctic Clean(专业亮色)、Midnight Pro(深炭灰 + 电青色)、Obsidian Neon(纯黑 + 霓虹青柠色)。点击顶部栏中的 **⚙** → **App Settings (Theme & Display)…**;在下次启动时生效。 |
| ❓ **帮助与参考** | 点击顶部栏中的 **❓** 可从任何页面打开帮助。包含风险等级指南 (CLEAN→STORM)、常见场景查询表和 24 个网络术语表。 |
| 👋 **首次运行引导** | 首次启动时的 3 步操作向导。每一步都有一个一键操作按钮:扫描您的网络 → 运行速度测试 → 查看您的网络评级。完成步骤会实时填充 Home 页面的迷你卡片;随时可跳过。状态保存在 QSettings 中。 |
### 高级模式选项卡
| 选项卡 | 功能说明 |
|---|---|
| 🔁 **逐跳追踪 (MTR)** | 连续路由跟踪——每个跃点的实时丢包率 %、平均 RTT、上次 RTT,每个周期更新。 |
| 🔧 **工具与网络唤醒** | TCP 端口扫描器(快速/正常/低影响)、服务版本检测、 抓取、Wake-on-LAN 魔术包发送器、新设备基线差异警报。 |
| 🗺 **网络拓扑图** | 您的网络的视觉拓扑图。 |
| 🛡 **ARP 欺骗监视** | 检测 ARP 毒化和 MITM 攻击。 |
| 📦 **DHCP 租约** | 检测流氓 DHCP 服务器。 |
| 📊 **带宽使用** | 使用实时数据包捕获的逐设备 rx/tx bps 监视器。 |
| ⏱ **计划扫描** | 每 N 分钟自动扫描,并在发现新设备或设备更改时发出桌面通知。 |
| 📟 **SNMP 设备信息** | 轮询基本 SNMP OID (sysDescr、sysName、sysUpTime、ifTable)——无需 pysnmp 依赖。 |
| 📥 **SNMP Trap 接收器** | 被动 UDP 监听器(端口 162,非管理员时回退到 16200)。使用仅标准库的 BER/ASN.1 解码器解码 SNMPv1/v2c traps。带有 varbind 详细信息对话框的实时 trap 表。 |
| 📜 **Syslog 查看器** | 被动 UDP/514 监听器(非管理员时回退到 5140)。RFC 3164 和 RFC 5424 解码。严重性/设施颜色编码、文本 + 严重性过滤器、双击详细信息对话框。 |
| ⚙ **自动化 Hook** | 事件驱动的规则,在网络事件发生时(设备宕机、高 RTT、新设备、触发警报)触发 Webhook URL 或运行本地脚本。规则存储在本地;不依赖云。 |
| 📄 **网络文档** | 按需或按计划自动生成格式化的 HTML 或 Markdown 完整网络快照——设备清单、服务、开放端口、拓扑描述和 TLS 状态。 |
| 📡 **MQTT / Home Assistant** | 将设备发现、可用性和指标事件发布到任何 MQTT broker。预格式化的 Home Assistant MQTT Discovery payload;可配置的主题前缀、QoS 和 broker 凭证 (OS 钥匙串)。 |
### 安全审计模式选项卡(面向 IT 专业人员)
| 选项卡 | 功能说明 |
|---|---|
| 🧠 **威胁情报** | Feodo Tracker + Emerging Threats 阻止列表源。AbuseIPDB v2 手动查询(基于授权、仅限 OUI、密钥存于 OS 钥匙串)。KPI 磁贴:阻止列表命中数、高可信度 IP、上次更新。 |
| 🔒 **TLS 证书** | 逐主机证书到期监控。每小时检查。徽章:OK / EXPIRING (< 30 天) / EXPIRED / UNREACHABLE。自动触发警报;结果持久化到 MetricStore。 |
| 🔎 **端口扫描 (SYN)** | 通过 Scapy 的原始 SYN 扫描器——隐蔽的半开扫描,比 TCP 连接更快。需要管理员权限。 |
| 🔎 **端口扫描 (UDP)** | UDP 端口扫描器。识别 DNS、SNMP、NTP、mDNS 和其他 UDP 服务。需要管理员权限。 |
| 💻 **OS 检测** | 通过 TTL + Banner 抓取 + TCP SYN 探测进行 OS 指纹识别。 |
| ⚠ **设备风险评分** | 基于开放端口、OUI 标志、OS 和暴露情况的逐设备数字风险评分。 |
| 🛡 **已知 CVE** | 针对检测到的 OS/服务版本的 NVD API v2 CVE 查找。限速;离线安全。 |
| 📋 **CVE 追踪器** | 每个主机/服务的 CVE 生命周期状态机:Open → Acknowledged → Accepted Risk → Remediated。从扫描导入、开放天数计数器、所有者字段。右键单击以更改状态或打开 NVD。 |
| 🌍 **暴露于互联网** | WAN IP、CGNAT 检测、UPnP 端口映射枚举。 |
| 🔑 **登录测试 (SSH/SMB)** | 针对发现的 SSH 和 SMB 服务进行凭证测试。 |
| 🔭 **完整设备发现** | 并行 ARP + ICMP + TCP SYN + mDNS 扫描——最高准确度的设备普查。 |
| 🗂 **Windows 共享 (SMB)** | NetBIOS + SMB 共享和用户枚举。 |
| 🔌 **插件模块** | 运行自定义扫描模块。将 `.py` 文件放入 `plugins/` 文件夹——无需重启。 |
| 🔒 **私有端点检查** | 云私有端点的 DNS/TCP/TLS 可达性检查器。 |
| ☁ **云元数据探测** | 检测云 VM SSRF 元数据端点暴露。 |
## ISP 问责报告
Network Grade 选项卡中的 **📊 生成 ISP 报告** 按钮可导出一个专为 ISP 支持工单设计的独立 HTML 文件。
它包含:
- 整体网络健康评级和评分
- 每个维度带有颜色编码的 A–F 评级的性能细分
- 带有逐跳丢包情况的路由跟踪 / MTR 跃点表——在第 2 跃点及以上首次出现的丢包发生在 ISP 的网络中
- 来自稳定性日志的带时间戳的宕机日志
- 关键指标:在线时间 %、平均延迟、抖动、下载速度、公网 IP
- 面向支持技术员的纯英语指南
打印为 PDF:**Ctrl+P → 另存为 PDF**。
## 网络评级 — A 到 F
**📊 网络评级** 选项卡根据校准的“完美家庭网络”基线对您的连接进行评分:
| 维度 | 理想值 |
|---|---|
| 连接在线时间 | = 99.5 % |
| 平均延迟 | = 20 ms |
| 抖动 (通话质量) | = 5 ms |
| DNS 响应速度 | = 30 ms |
| 下载速度 | = 25 Mbps |
| 网络设备安全性 | 0 台高风险设备 |
| 生成树 (STP) 健康 | 0 个流氓网桥 |
| 广播风暴级别 | < 50 广播包/秒 |
每个维度都会显示您的值、理想目标、字母评级、纯英语结论和可操作的修复提示。加权总体评级还驱动视觉诊断覆盖层的颜色(A/B 为绿色,C 为琥珀色,D/F 为红色)。
## 修复指南 — 随处右键点击
右键点击扫描结果中的任何设备、BPDU 源或风暴源,可弹出一个带有编号修复步骤的 **🔧 修复指南** 对话框。根本原因分析选项卡也会为每个发现显示一个 **如何修复** 列。
## IoT 行为基线
1. **学习** (30–600 秒):捕获每个设备通常使用的 IP 地址、端口和数据包速率
2. **监控**:持续监视流量并发出警报:
- **SYN_SCAN** — 设备对网络进行端口扫描(受损 IoT 特征)
- **NEW_DEST** — 设备正在联系它以前从未联系过的服务器
- **NEW_PORT** — 设备正在使用不寻常的端口
- **METADATA_PROBE** — 设备正在查询云元数据端点(潜在的 SSRF)
- **RATE_SPIKE** — 流量超过基线 5 倍
## 后台网络日志记录器 — ISP 争议的证据
启动日志记录器并让应用程序保持运行。每个周期记录:
| 选项 | 记录内容 | 开销 |
|---|---|---|
| *(基础)* | Ping RTT + 每个目标的通过/缓慢/失败 | 极小 |
| **抖动** | 3 次 ping,标准差 | ~3 倍 ping 时间 |
| **DNS 延迟** | 系统解析器往返时间 | ~50 ms |
| **HTTP 检查** | 强制门户检测 | ~100–300 ms |
| **ARP 监视** | ARP 表快照,在新/更改的 MAC 上发出警报 | ~100 ms |
日志保存到 `~/Documents/NetSentinel/logs/`。加载任何日志以进行自动化的纯英语分析,包括每次宕机的开始、结束和持续时间。
## 从源码运行
```
git clone https://github.com/ossianericson/netsentinel
cd netsentinel
pip install -r requirements.txt
python app.py # add sudo / Run as Administrator for full packet capture
```
## 构建您自己的可执行文件
**构建前的要求:**
- 必须安装 Python 3.11(在 Windows 上使用 `winget install Python.Python.3.11`)。Python 3.12+ 会破坏 `speedtest-cli` 依赖——构建必须使用 3.11。
- `build.bat` 会自动创建一个 `.venv311` 虚拟环境并安装包括 `speedtest-cli` 在内的所有依赖项。无需手动 pip 步骤。
```
# Windows — 构建 GUI + CLI + Windows 服务
build.bat
# macOS / Linux — 构建 GUI + CLI
chmod +x build.sh && ./build.sh
```
输出:
| 可执行文件 | 平台 |
|---|---|
| `dist/NetSentinel.exe` | Windows GUI |
| `dist/NetSentinel-cli.exe` | Windows CLI (~小 80%) |
| `dist/NetSentinel-svc.exe` | Windows 服务 |
| `dist/NetSentinel` | Linux/macOS GUI |
| `dist/NetSentinel-cli` | Linux/macOS CLI |
## CLI — 无头 / CI 模式
```
python cli.py scan --format html --output report.html
python cli.py scan --cidr 10.0.0.0/24 --format json --output devices.json
python cli.py diagnose
python cli.py log --interval 30 --targets 8.8.8.8 1.1.1.1 --dns --arp
python cli.py ports 192.168.1.1 --mode fast
python cli.py log-chart ~/Documents/NetSentinel/logs/netlog_20260426_120000.csv
```
**退出代码 (扫描):** `0` = 正常,`1` = 错误,`2` = 发现有高风险设备
## Windows 服务 — 7×24 小时后台日志记录器
```
pip install pywin32
python -m pywin32_postinstall -install # once, as Administrator
python svc.py install
python svc.py start
```
配置文件:`%PROGRAMDATA%\NetSentinel\netsentinel-svc.ini`
日志文件:`%PROGRAMDATA%\NetSentinel\logs\netlog_YYYYMMDD.csv`
在稳定性日志选项卡中加载任何服务日志以进行全面分析。
## 本地 REST API
NetSentinel 公开一个只读 HTTP API,以便外部工具可以查询您的网络数据。
**默认禁用。** 在 **Settings → Local REST API** 中启用。
| 设置 | 默认值 |
|---|---|
| 绑定地址 | `127.0.0.1` (仅本地主机) |
| 端口 | `8765` |
| 外部访问 | 关闭 — 需要显式切换 + 确认警告标签 |
| API 密钥 | 使用 `secrets.token_hex(32)` 生成一次,存储在 OS 钥匙串中 |
**端点:**
```
GET /health — heartbeat (no auth required)
GET /devices — full device inventory
GET /alerts?hours=24 — recent fired alerts
GET /uptime/?hours=24 — uptime history for one host
GET /speed-history?hours=168 — speed test history
```
**身份验证:**
```
X-API-Key:
# 或
?api_key=
```
**示例:**
```
curl -H "X-API-Key: abc123..." http://127.0.0.1:8765/devices
```
**示例:**
```
sensor:
- platform: rest
resource: http://127.0.0.1:8765/devices
headers:
X-API-Key: !secret netsentinel_api_key
```
## 项目结构
```
app.py # GUI launcher
cli.py # Headless CLI
svc.py # Windows Service
offenders.json # MAC OUI risk database (8 vendor groups, 115 OUI prefixes)
installer.iss # Inno Setup Windows installer script
modules/
rogue_device.py # M1 — ARP scan, OUI fingerprinting, IPv6 RA snooping
stp_detector.py # M2 — STP/BPDU capture (requires Npcap)
storm_analyser.py # M3 — Broadcast storm detection
wifi_scanner.py # M4 — Hidden SSID, rogue AP, co-channel interference
dns_correlator.py # M5 — Live ping + DNS latency correlator
network_diagnostics.py # M6 — On-demand diagnostics, speed test, traceroute
network_logger.py # M7 — Long-term ping logger, outage detection, analysis
network_benchmark.py # Network health grader — A–F score across 8 dimensions
root_cause_correlator.py # Cross-module root cause analysis (ISP vs local split)
iot_baseline.py # IoT behavioural baseline learning and anomaly monitoring
mac_registry.py # Curated OUI/model registry (Google, TP-Link, Apple, Amazon, etc.)
name_resolver.py # Multi-method device name resolution (mDNS, NetBIOS, SNMP, DHCP)
port_scanner.py # TCP connect scanner, service version probes
device_classifier.py # Device-type classifier (IP Camera, NAS, Smart TV, etc.)
risk_scorer.py # Per-device risk scoring with numeric score and remediation
os_fingerprint.py # OS fingerprinting: TTL+banner + TCP SYN probe
syn_scanner.py # SYN scanner + UDP scanner (Scapy, requires admin)
cve_lookup.py # NVD API v2 CVE lookup, rate-limited, offline-safe
internet_exposure.py # WAN IP, CGNAT detection, UPnP port-mapping enumeration
credentialed_scan.py # SSH credentialed deep scan
combined_discovery.py # Parallel discovery: ARP + ICMP + TCP SYN + mDNS
smb_enumerator.py # NetBIOS + SMB share/user enumeration
report_exporter.py # HTML, JSON, CSV, Nmap XML, ISP Accountability Report
log_chart.py # RTT chart renderer (matplotlib PNG)
utils.py # Cache flush, ping sweep, network info, WoL, device baseline
arp_monitor.py # ARP spoof / MITM detector
dhcp_detector.py # Rogue DHCP server detector
bandwidth_monitor.py # Per-device rx/tx bps monitor
tls_checker.py # SSL/TLS certificate checker
snmp_poller.py # SNMPv1/v2c poller (no pysnmp dependency)
scheduler.py # Scheduled scan engine with desktop notifications
nl_query.py # Natural language device filter (zero external deps)
plugin_system.py # Plugin loader — drop .py into plugins/
private_endpoint_checker.py # DNS/TCP/TLS checker for cloud private endpoints
cloud_metadata.py # Cloud VM / SSRF metadata exposure detection
metric_store.py # Persistent SQLite time-series database (RTT, device state, events)
availability_monitor.py # Continuous background availability monitor (UP/DEGRADED/DOWN state machine)
device_tracker.py # New/disappeared device detection — diffs scan results against known-device inventory
alert_engine.py # Threshold alerting engine (RTT/loss/down/new-device rules, cooldown, callbacks)
cert_monitor.py # TLS certificate expiry monitor — hourly checks, EXPIRING/EXPIRED alerts
service_monitor.py # TCP port heartbeat monitor — SERVICE_DOWN alerts with cooldown
snmp_trap_receiver.py # Passive SNMP trap listener — stdlib BER/ASN.1 decoder, SNMPv1/v2c
syslog_receiver.py # Passive syslog listener — RFC 3164 / RFC 5424 decoder
report_scheduler.py # Scheduled HTML report generation — configurable interval + pruning
notification_router.py # Per-channel notification delivery rules (Toast / Webhook / Email)
config_baseline.py # Config snapshot builder, diff engine (added/removed/changed devices)
trend_analyser.py # OLS regression over RTT/loss/jitter time-series; ETA-to-threshold
maintenance_window.py # Maintenance window manager — alert suppression during defined periods
dhcp_lease_scanner.py # DHCP lease inventory parser (dnsmasq / dhclient / nmcli / ARP+ipconfig)
dns_zone_scanner.py # AXFR zone transfer + mDNS Bonjour/Avahi enumeration
threat_intel.py # Threat intelligence DB (Feodo Tracker, ET, AbuseIPDB)
rest_api.py # Local read-only Flask REST API (127.0.0.1 default, OS-keychain API key)
automation_hooks.py # Event-driven automation: webhook/script triggers on network events
net_doc_generator.py # Auto-generates HTML/Markdown network documentation snapshots
mqtt_publisher.py # MQTT event publisher — Home Assistant Discovery + metric topics
geo_locator.py # Local IP geolocation via MaxMind GeoLite2-City.mmdb (no external API)
wifi_heatmap.py # WiFi signal-strength heatmap — IDW interpolation, JSON survey storage
trigger_expression.py # Custom alert trigger expression language, parser, and rule evaluator
ui/
dashboard.py # Main window — sidebar nav (Standard / Advanced / Security Audit)
first_run_dialog.py # 4-slide first-run onboarding dialog (shown once on first launch)
npcap_banner.py # Inline banner shown when Npcap is not installed on Windows
topology_widget.py # Network topology map widget
matrix_rain.py # Visual Diagnostic Overlay (Ctrl+Shift+M) — colour = network grade
live_graph.py # Real-time latency graph
styles.py # Single source of truth for all colours, fonts, and QSS (3 themes)
pages/
overview_page.py # Configurable live tile dashboard (drag-to-reorder)
history_page.py # Availability History charts (RTT + UP/DEGRADED/DOWN, 1h–7d zoom)
inventory_page.py # Inventory change log (JOINED/LEFT/UP/DOWN/DEGRADED/RECOVERED events)
uptime_page.py # Uptime & SLA table (24h / 7d / 30d per device)
service_page.py # Service Heartbeat monitor (TCP port checks every 60 s)
reports_page.py # Auto Reports — scheduled HTML report generation
cert_page.py # TLS Certificates — expiry monitor with OK/EXPIRING/EXPIRED badges
snmp_trap_page.py # SNMP Trap Receiver — passive trap listener and decode table
syslog_page.py # Syslog Viewer — passive UDP syslog listener
settings_page.py # App Settings — theme picker, display preferences, keyboard shortcuts
notifications_page.py # Notification routing rules — Toast / Webhook / Email / Pushover / ntfy / Telegram; escalation policy; delivery log
baseline_page.py # Config Baseline Snapshots — take, compare, diff viewer
trend_page.py # Predictive Trend Forecasts — OLS regression results table
maintenance_page.py # Maintenance Windows — schedule, manage, suppression log
dhcp_lease_page.py # DHCP Lease Inventory — platform-aware lease table
dns_zone_page.py # DNS Zone Map — AXFR + mDNS enumeration
threat_intel_page.py # Threat Intelligence — blocklist feeds, AbuseIPDB lookup
cve_page.py # CVE Tracker — lifecycle state machine per host/service
home_automation_page.py # Home Automation Hub — HA/MQTT/Hue/Sonos detection
connections_page.py # Active Connections — process-to-socket map
live_bandwidth_page.py # Live Bandwidth — 60s rolling interface chart
speed_test_page.py # Speed Test — Ookla-compatible, arc gauge, history
automation_page.py # Automation Hooks — event-driven webhook/script trigger rules
network_doc_page.py # Network Documentation — auto-generates HTML/Markdown network docs
mqtt_page.py # MQTT / Home Assistant — publishes device events to MQTT broker
wifi_heatmap_page.py # WiFi Heatmap — floor plan import + IDW signal-strength overlay
geo_map_page.py # Geolocation Map — world-map visualisation of internet-facing IPs
trigger_builder_page.py # Custom Triggers — visual rule builder for alert expressions
workers/
scan_worker.py # QThread workers (28 total)
availability_worker.py # Background device availability monitor (QThread, 60 s interval)
cert_worker.py # TLS cert check worker (QThread, hourly)
service_worker.py # Service heartbeat worker (QThread, 60 s interval)
snmp_trap_worker.py # SNMP trap listener worker (QThread, passive UDP)
syslog_worker.py # Syslog listener worker (QThread, passive UDP)
report_scheduler_worker.py # Scheduled report generation worker (QThread)
dhcp_lease_worker.py # DHCP lease refresh worker (QThread)
dns_zone_worker.py # DNS zone scan worker (QThread)
threat_intel_worker.py # Threat intel feed updater worker (QThread)
rest_api_worker.py # Local REST API server worker (QThread daemon)
iface_bw_worker.py # Interface bandwidth sampler worker (QThread, 1s interval)
```
## 添加流氓设备特征
编辑 [`offenders.json`](offenders.json) 或提交 PR(参见 [CONTRIBUTING.md](CONTRIBUTING.md)):
```
{
"vendor": "Your Device Brand",
"ouis": ["aa:bb:cc"],
"known_issues": ["STP BPDU injection — claims Root Bridge via Ethernet"],
"risk_level": "HIGH",
"forum_reference": "https://...",
"remediation": "Disconnect its Ethernet cable and use Wi-Fi backhaul only."
}
```
## 常见问题
**为什么我需要以管理员身份运行?**
原始数据包捕获(STP、ARP 监视器、广播风暴、带宽)需要直接访问网络适配器。在 Windows 上,这需要 Npcap + 管理员权限。标准选项卡(设备列表、DNS、健康检查、ping)无需提权即可工作。
**为什么需要单独安装 Npcap?**
Npcap 是来自 Nmap 项目的第三方驱动程序。将其捆绑会使每次发布增加 3–4 MB,并要求用户自动接受 Npcap 的 EULA。单独安装可保持透明度。
**我的互联网每 30–45 秒断开一次。NetSentinel 能找到原因吗?**
能——这是最常见的 STP 流氓网桥症状。以管理员身份运行 NetSentinel,打开 **流氓网桥 (STP)** 选项卡,然后点击开始。如果列出的根网桥设备不是您的路由器,则该设备正在导致您的断网。右键点击它以获取修复步骤。
**它说我的一半网络是“未知设备”——这正常吗?**
一些制造商注册了多个 OUI 前缀,并非所有前缀都在数据库中。右键点击设备 → 端口扫描,查看它运行的服务,这通常可以识别它。您也可以在 [maclookup.app](https://maclookup.app) 手动检查 MAC OUI。
**NetSentinel 会把数据发送到其他地方吗?**
没有遥测、没有云、没有账号。唯一的外部连接是您明确触发的(速度测试、CVE 查找、DNS 泄漏测试、更新检查)。请参阅下面的隐私部分。
**我可以在服务器上无头运行它吗?**
可以——`python cli.py scan` 或编译好的 `NetSentinel-cli` 二进制文件会运行所有发现并输出 JSON 或 CSV。请使用 `--help` 查看选项。
**应用在 Linux 上启动时崩溃。**
最常见的原因:缺少 Qt 平台插件。安装 `libxcb-cursor0`:
```
sudo apt-get install libxcb-cursor0
```
然后使用 `QT_QPA_PLATFORM=xcb ./NetSentinel` 运行。
**如何添加 NetSentinel 无法识别的设备厂商?**
在 `offenders.json` 中添加条目并提交 PR —— 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 最新动态
### v.5.7 (当前版本)
**警报规则默认仅限手动开启**
- 所有 9 个内置警报规则现在默认为 `enabled=False` —— 全新安装时不会触发任何警报
- 设置 → 通知增加了一个新的 **Alert Rules** 卡片,包含每个规则的复选框和纯英语描述
- 规则启用状态保存在 QSettings 中;缺少键值时默认视为禁用
- 发送渠道 (toast、email、webhook、Pushover、ntfy、Telegram) 仅接收用户明确启用的规则的警报
- 桌面 Toast 渠道也默认为关闭
**主页修复**
- 上传速度标签从被截断的 `↑ 88 Mbps` 更改为 `/ up 88 Mbps` (箭头字形在某些字体中会被截断)
- 立即扫描和 ISP 报告按钮现在具有明确的 `setStyleSheet()` 调用——不再渲染为扁平文本
- 模式切换药丸增加了一个可见的边框 (`1px solid`, `border-radius:4px`, `padding:0 8px`),因此它看起来像一个可点击的按钮
- 设备迷你卡在计数为 0 时显示 `Run a scan to discover devices`;仅当计数 > 0 时才显示 `All healthy`
**Bug 修复**
- `NotificationsPage._rule_checkboxes` 在卡片构建器运行之前初始化——修复了启动时的 `AttributeError` 崩溃
- `_restore()` 使用 `_restoring` 守卫包装在 `try/finally` 中——防止在恢复过程中 `_save()` 调用覆盖 QSettings 值
- 添加了 `LICENSE` 文件——修复了 manifest PR 上的 WinGet `URL-Validation-Error`
### v1.50
**渐进式展开导航**
- 通过模式切换药丸循环切换的三个侧边栏模式:**Home** (5 个要点,无杂乱),**Standard** (静态大写节标题下的完整功能集),**Pro** (增加带有 `·admin` 徽章的安全审计项)
- 模式保存在 QSettings 中;在下次启动时恢复
- 节标题是非交互式分隔符——没有折叠/展开的点击目标
**主页**
- 在 Home 模式下显示的专用着陆页:网络评级圆圈 (A–F,颜色编码)、三个迷你卡片 (下载速度、稳定性/丢包、在线设备)、近期警报条
- 迷你卡片通过监视周期实时更新:带颜色的值标签 (绿色/琥珀色/红色)、带单位的子行、状态徽章
- 警报条将新警报作为行前置 (最多显示 3 条);当过去 24 小时内没有发生进一步警报时,会显示永久性页脚
**首次运行操作向导**
- 用 3 步操作向导取代了 4 页信息介绍
- 第 1 步 (蓝色):扫描您的网络 —— 在父仪表板上调用 `_start_full_scan()`
- 第 2 步 (琥珀色):运行速度测试 —— 导航到速度测试页
- 第 3 步 (绿色):查看您的网络评级 —— 导航到网络评级页
- 每个完成的步骤都会显示一个 ✓ Done 徽章;完成时在 QSettings 中标记首次运行已完成
**速度测试 — 多后端引擎**
- 3 级后端级联:Ookla CLI 二进制文件 (1 Gbps+) → speedtest-cli (8 下载 / 4 上传线程) → 纯 Python 16 流 HTTP 回退 (无需额外依赖)
- Ookla CLI 在可执行文件旁、`%LOCALAPPDATA%\NetSentinel\` 或 PATH 中自动检测;Windows `CREATE_NO_WINDOW`
- `ssl.wrap_socket` 垫片保留了对 speedtest-cli 2.1.x 的 Python 3.12 兼容性
**AppData 路径加固**
- 向 `modules/utils.py` 添加了 `get_app_data_dir()`——平台感知的按用户数据目录 (`%LOCALAPPDATA%\NetSentinel` / `~/Library/Application Support/NetSentinel` / `~/.config/NetSentinel`)
- `MetricStore._default_path()` 升级为 3 级策略——便携版 → AppData → `~/.config`;当安装在 `C:\Program Files\` 中时,不再因 `PermissionError` 崩溃
- 崩溃日志和 faulthandler 输出现在写入 `get_app_data_dir()` 而不是可执行文件目录
**窗口构建稳定性**
- `main()` 顶部的 `sys.stderr = None` 守卫——重定向到 AppData 中的 `netsentinel_stderr.log`,而不是 `AttributeError` 导致进程崩溃
**侧边栏用户体验**
- 将 35 个混合表情符号替换为一致的几何 Unicode 符号——图标条在折叠 (48 px) 模式下清晰可读
- Ctrl+F 快捷键可从任何页面聚焦侧边栏搜索框;自动展开折叠的侧边栏
- 搜索框现在始终以 `⌕` 占位符在折叠模式下可见
**WiFi 信号强度热图** (工具部分)
- 导入任何平面图图像 (PNG/JPEG/BMP) 作为画布背景
- 在您的空间内走动并点击您站立的位置——每次点击都会记录当前的 WiFi 扫描结果以及该空间位置上每个 BSSID 的 dBm 值
- IDW (反距离加权) 插值生成平滑的 `RdYlGn` 热图覆盖层
- AP 选择器组合框显示所有发现的 BSSID;“All APs”计算所有接入点的平均值
- 覆盖率统计卡片:每次调查的 Excellent / Good / Fair / Weak / Very Weak % 细分
- 调查以 JSON 形式保存到 `%LOCALAPPDATA%\NetSentinel\heatmap_surveys\`;将热图导出为 PNG
**地理位置图** (工具部分)
- 使用本地 MaxMind GeoLite2-City `.mmdb` 数据库在世界地图上绘制面向 internet 的 IP——无需 API 密钥,无外部调用,完全离线
- 一键从 `download.maxmind.com` 下载数据库,带有进度条;强制执行主机允许列表 (主机验证安全修复)
- 颜色编码的标记类别:Threat Intel (红色)、Exposed Services (琥珀色)、Manual Entry (蓝色)
- `set_threat_entries()` 方法:Threat Intelligence 页面可以直接将阻止列表 IP 推送到地图
- 详细信息面板显示国家、城市、纬度/经度、组织以及任何链接的服务条目
- Bogon / RFC1918 地址自动从地图绘制中过滤
**自定义触发器表达式** (报告与警报部分)
- 表达式语言:`avg(rtt["ip"], 5m) > 80`,`loss%["ip"] > 5 AND state["ip"] != "UP"`,`uptime%["ip"] < 95`
- 支持的指标:`rtt`、`loss%`、`jitter`、`state`、`uptime%`;聚合函数:带有 `s`/`m`/`h` 窗口的 `avg`、`max`、`min`
- 可视化规则构建器对话框——名称、严重性 (INFO/WARNING/CRITICAL)、表达式编辑器、实时纯英语预览标签、冷却时间、6 个内置示例
- Test Now 按钮在线程外针对实时 MetricStore 数据评估所选规则
- `evaluate_all()` 与仪表板监视周期集成,自动触发警报
- 规则以 JSON 格式存储到 `%LOCALAPPDATA%\NetSentinel\trigger_rules.json`
**自动化 Hook** (高级部分)
- 事件驱动规则:在网络事件发生时触发 Webhook HTTP POST 或执行本地脚本/命令
- 支持的触发器:device-down、high RTT、new device discovered、alert fired
- 规则编辑器,包含方法 (GET/POST)、URL、payload 模板和按事件类型的启用开关
- 测试按钮立即触发规则;带有时间戳、状态和响应的执行日志
**网络文档** (高级部分)
- 按需或按计划生成格式化的 HTML 或 Markdown 文档快照,记录您的完整网络
- 涵盖:设备清单表、服务状态、开放端口、TLS 证书状态、拓扑摘要
- 输出保存到 `%LOCALAPPDATA%\NetSentinel\` 或用户选择的目录;一键在浏览器中打开
**MQTT / Home Assistant 发布器** (高级部分)
- 将设备发现、可用性 (`online`/`offline`) 和指标事件发布到任何 MQTT broker
- Home Assistant MQTT Discovery payload 自动为 binary_sensor (可用性) 和 sensor (RTT, loss%, jitter) 设备类型格式化
- 可配置的 broker 主机/端口/主题前缀/QoS;凭证存储在 OS 钥匙串中 (规则 22-A)
- 连接状态指示器;UI 中的发布日志
**凭证扫描 — WMI 扩充**
- `_parse_windows()` 现在通过 `wmic bios get SerialNumber` 捕获 BIOS 序列号
- 通过 `query session` 输出检测活动会话:正确将 STATE 识别为最后一列;过滤 `Active`/`Conn` 状态,跳过 `Disc`
- 所有调用者均可使用 `CredScanResult.serial_number` 和 `CredScanResult.active_sessions` 字段
### v1.4.0
**导航重构**
- 标准部分重组为 7 个命名子组:Discover、Live Monitor、Threat Detection、Health & History、Diagnostics、Reports & Alerts、Tools
- Threat Detection (Broadcast Storm、Rogue Bridge、IoT Behaviour) 提升到位置 3 —— 不再被埋在扁平列表的底部
- 修复了所有损坏的侧边栏表情符号字符
**活动连接** (`🔗`)
- 进程到套接字映射:机器上每个 TCP/UDP 连接及其 PID、可执行文件名、远程 IP、地理位置 (通过 ip-api.com 获取的国家/城市) 和连接状态
- 通过 `netsh advfirewall` 对每个进程进行一键防火墙阻止——阻止规则面板显示所有活动的 NS-Block-* 规则,并提供解除阻止支持
- KPI 行:Total / Established / External / FW Blocked;5 秒实时轮询
**实时带宽** (`📶`)
- 每个网络接口的 60 秒滚动双区域图 (上传 + 下载 Mbps)
- 接口选择器、KPI 磁贴 (当前上/下行速度、峰值上/下行速度)、会话总计表
- 概览仪表板中添加了实时带宽磁贴
**安全加固**
- SMTP 电子邮件密码从 QSettings (明文 INI) 迁移到通过 `keyring` 访问的 OS 钥匙串——首次运行时自动迁移现有存储的密码
- SNMP community string 字段已掩码处理 (`EchoMode.Password`) 并持久化到 OS 钥匙串
- `keyring~=25.0` 已添加到 `requirements.txt`
### v1.3.1
**概述仪表板**
- 概述页面上的可配置实时磁贴网格:Device Count、Fleet Uptime、Service Status、RTT Summary、TLS Health、Network Grade、Alert Feed、Device Events
- 在“编辑布局”模式下拖动磁贴以重新排序——布局通过 QSettings 在会话间保持
**三种颜色主题**
- Arctic Clean (专业亮色)、Midnight Pro (深炭灰 + 电青色)、Obsidian Neon (纯黑 + 霓虹青柠色)
- 所有颜色通过 `ui/styles.py` 强制执行——代码库中没有任何硬编码的十六进制值
- `⚙` 顶部栏的 **App Settings** 对话框中的主题选择器;在下次启动时应用
**设置与自定义**
- 专用 App Settings 对话框 (主题选择器、紧凑行切换、工具提示切换、完整键盘快捷键参考)
- 可从 `⚙` 顶部栏下拉菜单访问 → **App Settings (Theme & Display)…** —— 从任何页面始终只需一键之遥
- 主题在下次启动时应用;三种选择:Arctic Clean、Midnight Pro、Obsidian Neon
**帮助与参考**
- 通过顶部栏中的 `❓` 按钮打开 —— 可从每个页面访问,无需离开当前上下文
- 风险等级指南 —— 每个级别 (CLEAN → STORM → UNKNOWN) 的颜色编码徽章 + 纯英语含义
- 常见场景 ——“我希望……”查询表,将 12 个用户目标映射到正确的功能
- 术语表 —— 用纯英语定义的 24 个网络术语 (ARP、BPDU、CGNAT、CVE、mDNS、STP、TLS 等)
**首次运行引导**
- 首次启动时显示 4 页欢迎对话框 —— 解释 Standard / Advanced / Security Audit 部分,引导至 `⚙` 顶部栏菜单进行自定义
- "Don't show again" 复选框保存在 QSettings 中
**通知路由规则**
- 针对 Toast、Webhook (HTTP/S POST) 和 Email (SMTP) 通知的逐渠道发送规则- 每个渠道都有一个 `enabled` 切换开关、最低严重性过滤器 (`INFO` → `CRITICAL`) 和规则类型允许列表
- 带有时间戳、渠道、严重性和消息的发送日志——可配置最大条目数;可导出
- 设置保存在 QSettings 中;密码从不序列化到磁盘
- Webhook 和 Email 的“测试”按钮可立即验证连接性
**配置基线快照**
- 完整设备群的即时快照——IP、主机名、MAC、开放端口、OS、SNMP 字段
- 比较任意两个快照以生成结构化差异:添加/移除的设备、端口更改、字段更改、SNMP 偏移
- 带有颜色编码行的差异表 (绿色 = 已添加,红色 = 已移除,琥珀色 = 已更改)
- 快照存储在 MetricStore 中 (schema v4 `config_snapshot` 表);已标记并加上时间戳
**预测性趋势警报**
- 对存储的 RTT/丢包/抖动时间序列数据进行普通最小二乘法线性回归 (仅限标准库——无需 numpy)
- 逐指标结果:当前值、平均值、斜率/小时、R²、达到阈值的 ETA、严重性 (CLEAN / WARNING / CRITICAL)
- 可配置窗口 (6 小时 – 7 天);报告按 CRITICAL → CLEAN 排序,然后按 ETA 排序
- 完整的趋势结果表,其中 ETA 列按严重性进行颜色编码
**维护窗口**
- 定义计划内或临时维护期 (标签、主机列表、开始/结束时间、活动切换开关)
- 空主机列表 = 抑制所有主机警报;列出特定主机 = 仅抑制这些主机的警报
- 被抑制主机的所有警报都会在冷却评估之前被 AlertEngine 静默丢弃
- 抑制日志:时间戳、窗口标签、主机、规则名称、严重性、消息
- 保存在 QSettings (JSON) 中;purge-expired 辅助程序会移除早于 N 天的窗口
- 每 60 秒自动刷新;三个 KPI 磁贴 (Active / Scheduled / Suppressed this session)
**版本一致性强制**
- `tests/test_version_consistency.py` —— 6 个自动化测试,将每个包含版本的文件与 `app.py` 进行比较;`cli.py`、`apm.yml`、`debug_launch.py`、`installer.iss`、`build.bat` 或 `build.sh` 中的版本偏差现在会立即使测试套件失败
**CI/CD 与可靠性修复**
- winget 提交作为最终的 `submit-winget` 作业并带有 `needs: [release]` 移至 `release.yml` 中
- Winget 不再可能在构建失败时触发——单独的 `winget-submit.yml` 已被移除
- 更新可用栏现在使用严格的 semver 元组比较 (`_ver(latest) > _ver(current)`) —— 当开发版本领先于最新 GitHub 发布版时,不再会错误地触发
- 988 个自动化测试
### v1.2.0
**UI 与导航**
- 可折叠的侧边栏部分 (Standard / Advanced / Security Audit) 带有 ▼/▶ 切换和仅图标折叠模式
- 部分内的子组:Network Health、Traffic & Behaviour、Deep Analysis
- 侧边栏搜索/过滤栏——输入即可立即缩小导航项范围
- 纤细的 42px 顶部栏:品牌 | 搜索 | 结论 | Run Scan | Export | ⚙ 设置下拉菜单
- KPI 摘要栏高度降低;侧边栏节标题采用全大写企业风格
- 应用程序图标现在可以正确显示在任务栏、标题栏和桌面快捷方式中
**持久化监控 (新增)**
- **可用性历史页面**——持久的 RTT 和 UP/DEGRADED/DOWN 状态图表,支持 1h / 12h / 24h / 7d 缩放
- **后台可用性监视器**——启动时每 60 秒自动将每个设备的状态记录到本地 SQLite 数据库
- **MetricStore**——本地 SQLite 时间序列数据库存储跨会话的 RTT 样本、设备状态历史和状态变化事件
- **新设备/消失设备检测**——每次扫描会自动与持久的已知设备清单进行比对;新 MAC 和消失的设备会触发状态栏警报,并记录为 JOINED/LEFT 事件
- **阈值警报引擎**——可配置的规则在高 RTT、主机宕机、主机降级、丢包、新设备或设备消失时触发;冷却防止重复警报;在可用时通过系统托盘发送桌面 Toast
- **资产变更历史页面**——记录每个 JOINED/LEFT/UP/DOWN/DEGRADED/RECOVERED 事件的日志,带有过滤复选框和 1h…30d 缩放窗口
- **TLS 证书监视器**——每小时检查每个主机的证书;到期徽章 (OK / EXPIRING / EXPIRED / UNREACHABLE);当证书有效期不足 30 天或已过期时触发警报;结果持久化到 MetricStore
- **振荡检测**——AlertEngine 跟踪每个主机的历史状态转换;当主机过快地在 UP↔DOWN/DEGRADED 之间振荡 (可配置的次数 + 时间窗口) 时触发 `FLAP` 警报;当主机被归类为振荡状态时,会自动抑制 HOST_DOWN 警报
- **在线时间与 SLA 页面**——每个设备的 24h / 7d / 30d 在线时间百分比;全网平均值,最佳/最差设备 KPI 磁贴;颜色编码行 (绿色 ≥99%,琥珀色 ≥95%,红色 <95%);在每个可用性周期自动刷新
- **服务心跳监视器**——每个服务每 60 秒进行一次 TCP 端口可达性检查;带有冷却时间的 SERVICE_DOWN 警报规则;MetricStore (schema v3) 中的 `ServiceCheckPoint` 历史;带有 KPI 磁贴和 RTT 列的专用“Service Heartbeat”页面
- **自动报告生成**——定期的 HTML 状态报告 (可配置的间隔 + 输出目录);涵盖设备在线时间、TLS 证书、服务和设备事件;“立即生成”按钮;修剪以保留最近 N 份报告
- **SNMP Trap 接收器**——用于 SNMPv1 和 SNMPv2c trap 的被动 UDP 监听器 (端口 162);仅限标准库的 BER/ASN.1 解码器;带有 KPI 磁贴和 varbind 详细信息对话框的实时 trap 表;非管理员时回退到端口 16200
**其他改进**
- 启动时自动检查更新——如果存在较新版本,则显示蓝色通知栏
- Linux 版本中包含 Linux `.desktop` 文件 + `install-linux.sh`
- 强制执行企业设计系统:单一颜色源 (`ui/styles.py`),任何地方都没有硬编码的十六进制值
- APM 指令文件编码了架构规则和 AI agent 约束
- Winget 分发:`winget install NetSentinel.NetSentinel`
- **Syslog 接收器**——用于来自路由器、交换机和 Linux 主机的 RFC 3164 和 RFC 5424 syslog 的被动 UDP/514 监听器;严重性/设施解码;带有严重性颜色编码的实时表格、文本 + 严重性过滤器、双击详细信息对话框;非管理员时回退到端口 5140
### v1.0.4
- **网络评级 (A–F)**——对 8 个健康维度进行评分的基准选项卡;逐维度评级、结论和修复提示
- **ISP 问责报告**——将 MTR 跃点表、宕机日志、评级和指标导出为用于 ISP 支持升级的独立 HTML 文件
- **修复指南上下文菜单**——右键点击任何设备、流氓网桥或风暴源以获取编号的修复步骤
- **根本原因分析选项卡**——交叉关联 STP、风暴、诊断和日志发现;识别 ISP 还是本地故障
- **IoT 行为基线选项卡**——了解正常的 IoT 设备流量;对 SYN 扫描、新目标、速率峰值发出警报
- **设备名称注册表**——精选的 OUI/型号数据库:Google Nest、TP-Link Deco、Apple、Amazon Echo/Ring、Samsung、Netgear、Asus;多方法解析器 (mDNS、NetBIOS、SNMP、DHCP)
- **视觉诊断覆盖层评级颜色**——绿色 (A/B)、琥珀色 (C)、红色 (D/F) —— Ctrl+Shift+M
- **Windows 安装程序**——带有“开始菜单”快捷方式和 PATH 注册的 Inno Setup `.exe`
### v1.0.3
- Microsoft Store 合规性显示字符串更新;88 个 pytest 测试套件;CONTRIBUTING.md
### v1.0.2
- 拓扑图小部件;按设备划分的带宽监视器
### v1.0.1
- 全面扫描稳定性修复;Scapy 进程隔离;通过 faulthandler 记录崩溃日志
### v1.0.0
- IPv6 子网扫描;云元数据检测;日志记录器 RTT 图表 PNG 导出
## 隐私
没有遥测。没有云。没有账号。所有扫描和分析均在您的机器上运行。
唯一联系的外部端点是那些**您明确触发**的:
| 端点 | 目的 |
|---|---|
| `speed.cloudflare.com` | 下载速度测试 |
| `connectivitycheck.gstatic.com` | HTTP 连接检查 (日志记录器,默认关闭) |
| `bash.ws` | DNS 泄漏测试 |
| `services.nvd.nist.gov` | CVE 查询 (安全审计模式,按需) |
## 作者
[**Ossian Ericson**](https://github.com/ossianericson) — [github.com/ossianericson](https://github.com/ossianericson)
欢迎贡献——参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:ARP欺骗检测, BPDU分析, CVE漏洞查询, DNS中断检测, DNS日志记录, DNS查询工具, GitHub, IoT安全基线, ISP问责, MTR, Npcap, PyQt6, Rogue Device Detection, STP监控, WiFi扫描器, Windows网络工具, 安全基线检查, 密码管理, 广播风暴分析, 插件系统, 端口扫描器, 网络健康评级, 网络安全扫描器, 网络流量分析, 网络诊断工具, 网络连通性监控, 逆向工具, 非法设备检测