NoCoderRandom/netwatch

GitHub: NoCoderRandom/netwatch

一款人性化的局域网安全审计工具,将 nmap 的深度扫描能力封装为易用界面,自动完成设备发现、漏洞检测和报告生成。

Stars: 2 | Forks: 0

# NetWatch **人性化网络安全审计 — 由 nmap 驱动,为所有人打造。** [![Version](https://img.shields.io/badge/version-v1.7.0-blue)] [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue?logo=python&logoColor=white)](https://www.python.org/downloads/) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey?logo=windows)](https://github.com) [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Requires: nmap](https://img.shields.io/badge/requires-nmap-orange)](https://nmap.org) [![CVE data: OSV.dev](https://img.shields.io/badge/CVE%20data-OSV.dev-blueviolet)](https://osv.dev) [![EOL data: endoflife.date](https://img.shields.io/badge/EOL%20data-endoflife.date-yellow)](https://endoflife.date) NetWatch 是一款面向**家庭网络所有者和 IT 人员**的局域网安全审计工具,旨在为用户提供 nmap 级别的深度分析,同时无需学习 nmap 语法。只需将其指向您的网络,它就会 discover 所有活跃设备,识别运行中的软件指纹,对照已知的漏洞数据库和生命周期结束(EOL)记录进行检查,探测 Web 界面的常见弱点,测试默认凭据,并生成一份整洁的 HTML 报告,其中包含**通俗易懂的解释**和修复每项发现的编号步骤。它**完全只读且非破坏性** — 绝不会修改您网络上的任何内容。 ## 功能特性 ### 网络发现 - 通过快速 ping 扫描发现所有活跃主机 - 解析主机名并通过厂商/制造商查询检测 MAC 地址 - 灵活的目标输入:支持 CIDR、通配符、IP 范围、逗号分隔或主机名 - 可选集成 masscan,以在大型网络上实现更快的端口发现 ### 端口和服务扫描 - 六种扫描配置:QUICK, FULL, STEALTH, PING, IoT, SMB - 跨所有开放端口的并发 banner 抓取(50 线程池) - 带置信度百分比的 OS 指纹识别 - 集成 NSE (Nmap Scripting Engine) 以增强设备检测 - HTTP 指纹识别,用于识别路由器、摄像头、NAS 设备、打印机和 IoT 设备 - 自动 root 权限降级:在没有 sudo 的情况下运行 FULL/STEALTH 配置时会优雅地降级 - 并行安全分析 — 所有针对主机的检查(SSL, SSH, FTP, SMB, SNMP, Web)均通过线程池跨主机及主机内部并发运行 - 第 7 阶段安全分析无论网络规模大小均在 10 秒内完成 - 扫描前就绪状态检查 — 如果 nmap 缺失、CVE/EOL 数据库为空或默认模块未安装,会发出警告。在每次扫描前运行,不会阻断扫描。 ### 安全检查 NetWatch 在全面评估期间运行 12 个安全检查模块: | 检查项 | 发现内容 | |---|---| | **SSL/TLS** | 过期/自签名证书、弱密码套件、TLS 1.0/1.1、SSL 2.0/3.0、小型 RSA 密钥 | | **SSH** | 弱密钥交换、弱加密/MAC、SSHv1、小型主机密钥、原始 KEXINIT 分析 | | **SMB** | SMBv1、EternalBlue (MS17-010)、匿名共享、SMB 签名已禁用、NTLM 泄露 | | **FTP** | 匿名登录、明文凭据、缺少 STARTTLS | | **SNMP** | 默认团体字符串、SNMPv1、sysDescr 提取 | | **Web** | 缺少安全标头、通过 HTTP 的登录表单、目录列表、暴露的管理面板 | | **DNS** | DNS 劫持检测(与 Cloudflare 1.1.1.1 对比) | | **UPnP** | SSDP 发现、路由器上的 WAN 端口映射暴露 | | **mDNS** | Zeroconf/Bonjour 设备发现,查找躲避端口扫描的主机 | | **ARP** | ARP 欺骗检测、MAC 地址变更跟踪(需要 root) | | **Default credentials** | 路由器、NAS、摄像头、打印机上的出厂默认密码(可选) | | **Insecure protocols** | 按严重程度标记 Telnet、FTP、TFTP、rsh、rlogin、rexec | ### 漏洞情报 - **CVE 关联** — 使用 OSV.dev 将检测到的服务版本映射到已知的 CVE - **EOL 检查** — 对照 endoflife.date 检查 150 多种产品 - **JA3S TLS 指纹识别** — 通过 TLS 握手签名识别服务器软件 - 扫描期间完全离线 — 扫描期间不进行任何外部 API 调用。endoflife.date 和 OSV.dev 仅在 `--setup` 和 `--update-cache` 时被访问。只要缓存已填充,即使没有任何互联网连接也能进行扫描。 - 每周 CVE 刷新、每月 EOL 刷新 — 由您控制 ### 设备识别 - **14 个证据提取器** 融合了 MAC OUI、nmap OS、HTTP 指纹识别、TLS 证书、SSH banner、UPnP、SNMP sysDescr、Wappalyzer、mDNS、JA3S TLS 指纹、FTP banner、端口启发式分析和 nmap 服务字段,为每台主机形成统一的设备身份 - 识别厂商、型号、固件版本和设备类型,并进行置信度评分(当多个来源确认时给予一致性奖励) - 支持 130 多个别名以进行名称标准化 - 结果显示在终端表格和 HTML 报告的设备清单中 - 快速资产清单模式:`--identify` 标志跳过安全检查 ### 模块化数据系统 NetWatch 包含 7 个可下载的数据模块,用于扩展检测能力: | 模块 | 来源 | 新增内容 | |---|---|---| | `credentials-mini` | danielmiessler/SecLists | 前 50 个默认凭据(默认) | | `credentials-full` | ihebski/DefaultCreds-cheat-sheet | 2860+ 个厂商特定凭据 | | `wappalyzer-mini` | enthec/webappanalyzer | 前 500 种 Web 技术(默认) | | `wappalyzer-full` | enthec/webappanalyzer | 全部 7515 种 Web 技术 | | `ja3-signatures` | salesforce/ja3 | TLS 指纹数据库 | | `snmp-community` | danielmiessler/SecLists | 扩展的 SNMP 团体字符串 | | `camera-credentials` | many-passwords/many-passwords | IP 摄像头/DVR/NVR 默认密码 | ``` netwatch --modules # Show module status netwatch --download all # Download everything netwatch --download ja3-signatures # Download one module ``` ### 非法设备检测 - 将您的网络快照保存为可信基线 - 未来的扫描会自动标记不在基线中的未知 MAC 地址 - 检测意外 IP 地址上的已知设备 ### 风险评分 每台设备都会根据发现的严重程度和数量获得一个风险评分(0-100): | 评分 | 等级 | |---|---| | 0-10 | 最小风险 | | 11-30 | 低风险 | | 31-60 | 中风险 | | 61-80 | 高风险 | | 81-100 | 严重风险 | ### 报告生成 - **专业 HTML 报告** — 严重程度仪表板、每主机部分、带有通俗解释的发现卡片、优先建议 - **JSON 导出** — 机器可读的结构化输出 - 报告完全自包含 — 一个 HTML 文件,无外部依赖 - 所有发现均以颜色编码:严重、高、中、低、信息 ### 扫描历史与差异对比 - 每次扫描自动保存为 gzip 压缩的 JSON 快照 - 使用 `--history` 查看过去的扫描 - 使用 `--diff` 比较任意两次扫描,查看新主机、关闭的端口、新增/已解决的发现 - 使用 `--diff --since N` 与 N 天前的扫描进行比较 - 历史记录默认保留 90 天 ### 用户界面 - 引导式**交互模式** (`-i`) — 用于扫描、分析、导出、模块的多级菜单 - **旧式菜单** — 无参数运行时启动 - 直接 CLI 模式 — 支持脚本化和自动化 - 丰富的彩色终端输出,带有进度条、微调器和摘要面板 ## 系统要求 | 要求 | 最低 | 备注 | |---|---|---| | **Python** | 3.9+ | 推荐使用 3.12 | | **nmap** | 任何最新版本 | 必须位于系统 PATH 中 | | **masscan** | 任何版本 | 可选 — 更快的端口发现。`sudo apt install masscan` | | **git** | 任何版本 | 可选 — 用于 `--setup` 和 `--update` | | **OS** | Windows 10/11, Linux, macOS | 原生支持这三个平台 | | **权限** | 标准用户 | FULL, STEALTH, SMB 配置及 ARP 检测需要 Root/管理员权限 | ## 安装说明 ### Linux (Debian / Ubuntu / WSL) ``` sudo apt-get update sudo apt-get install -y nmap git python3 python3-pip python3-venv # 可选:更快的端口扫描 sudo apt-get install -y masscan git clone https://github.com/NoCoderRandom/netwatch.git cd netwatch python3 -m venv venv source venv/bin/activate pip install -r requirements.txt python3 netwatch.py --setup ``` ### Linux (RHEL / Fedora / CentOS) ``` sudo dnf install -y nmap git python3 python3-pip git clone https://github.com/NoCoderRandom/netwatch.git cd netwatch python3 -m venv venv source venv/bin/activate pip install -r requirements.txt python3 netwatch.py --setup ``` ### Windows 11 1. 从 [nmap.org/download.html](https://nmap.org/download.html) 下载并安装 nmap。勾选 "Add nmap to PATH"。 2. 克隆并安装: ``` git clone https://github.com/NoCoderRandom/netwatch.git cd netwatch python -m venv venv venv\Scripts\activate pip install -r requirements.txt python netwatch.py --setup ``` ### macOS ``` brew install nmap git clone https://github.com/NoCoderRandom/netwatch.git cd netwatch python3 -m venv venv source venv/bin/activate pip install -r requirements.txt python3 netwatch.py --setup ``` ## 快速开始 ``` # 交互模式 (推荐首次使用) python3 netwatch.py -i # 包含 HTML 报告的完整安全评估 python3 netwatch.py --full-assessment --target 192.168.1.0/24 # 网络快速扫描 python3 netwatch.py --target 192.168.1.0/24 # IoT 设备扫描 (摄像头、路由器、智能设备) python3 netwatch.py --target 192.168.1.0/24 --profile IOT # 下载所有数据模块以进行扩展检测 python3 netwatch.py --download all ``` ## 所有 CLI 参数 | 参数 | 描述 | 需要 Root | |---|---|---| | `--target TARGET` | 要扫描的 IP、CIDR 范围、主机名或范围 | 否 | | `--profile PROFILE` | 扫描配置:QUICK, FULL, STEALTH, PING, IOT, SMB(默认:QUICK) | 视情况而定 | | `-i`, `--interactive` | 启动引导式交互模式 | 否 | | `--full-assessment` | 完整评估:所有阶段 + 自动 HTML 导出 | 否 | | `--identify` | 仅运行设备识别(跳过安全检查) | 否 | | `--nse` | 启用 Nmap Scripting Engine 以增强检测 | 否 | | `--check-defaults` | 测试出厂默认凭据(仅限您自己的设备) | 否 | | `--save-baseline` | 将扫描保存为用于非法检测的可信设备基线 | 否 | | `--setup` | 首次安装向导(依赖项 + 缓存下载) | 否 | | `--update-cache` | 手动刷新 CVE 和 EOL 数据缓存 | 否 | | `--cache-status` | 显示缓存时效和条目数,然后退出 | 否 | | `--modules` | 显示所有可下载数据模块的状态 | 否 | | `--download MODULE` | 下载一个数据模块(或 "all") | 否 | | `--db SIZE` | `--setup` 的 EOL 数据库大小:mini, normal, large(默认:normal) | 否 | | `--history` | 显示扫描历史表并退出 | 否 | | `--diff` | 对比最近两次保存的扫描并退出 | 否 | | `--since DAYS` | 与 `--diff` 配合:与至少 N 天前的扫描进行对比 | 否 | | `--check-version` | 检查 GitHub 上是否有更新的 NetWatch 版本 | 否 | | `--update` | 从 GitHub 拉取最新代码并重新安装依赖 | 否 | | `--verbose` | 启用调试日志记录 | 否 | | `--no-color` | 禁用彩色输出(适用于日志文件) | 否 | | `--quiet` | 抑制进度条(仍显示发现结果) | 否 | | `--version` | 显示版本号并退出 | 否 | ## 扫描配置 | 配置 | nmap 标志 | 速度 | 需要 Root | 适用场景 | |---|---|---|---|---| | **PING** | `-sn` | ~30s | 否 | 快速查找活跃设备 | | **QUICK** | `-T4 -F -sV --version-intensity 2` | 1-3 分钟 | 否 | 网络初探(带轻度版本检测) | | **FULL** | `-T4 -A -sV -O --osscan-guess` | 5-15 分钟 | 是 | 对特定主机的深度分析 | | **STEALTH** | `-sS -T2 -sV` | 10-30 分钟 | 是 | 低噪声扫描 | | **IOT** | `-T4 -sV -p 23,80,443,8080,8443,554,1900,5000,5001,7547,49152 --open` | 1-3 分钟 | 否 | 摄像头、路由器、智能设备 | | **SMB** | `-T4 -sV -p 135,139,445,137,138 --script smb-security-mode,smb2-security-mode,s-vuln-ms17-010 --open` | 1-3 分钟 | 是 | Windows 共享、EternalBlue 检查 | ## 缓存管理 NetWatch 在扫描期间绝不会调用外部 API。所有数据均从 `data/cache/` 中的本地缓存文件读取。 | 文件 | 内容 | 刷新间隔 | |---|---|---| | `data/cache/cve_cache.json` | 按产品:版本索引的 CVE 数据 | 每 7 天 | | `data/cache/eol_cache.json` | 150 多种产品的 EOL 日期 | 每 30 天 | | `data/cache/cache_meta.json` | 上次更新的时间戳 | 自动 | ``` netwatch --cache-status # See current cache state netwatch --update-cache # Refresh stale caches ``` 即使缓存过期或缺失,扫描也能正常进行 — 只是您可能拥有过时的 CVE 数据。 ## 非法设备检测 ``` # 步骤 1:当所有已知设备存在时保存基线 python3 netwatch.py --target 192.168.1.0/24 --save-baseline # 步骤 2:后续扫描将自动与基线进行对比 python3 netwatch.py --target 192.168.1.0/24 ``` | 发现 | 严重性 | 含义 | |---|---|---| | Unknown device detected | 中 | MAC 不在基线中 — 新设备或未授权设备 | | Device IP changed | 低 | 已知 MAC 出现在不同的 IP(通常是正常的 DHCP 行为) | | Previously seen device offline | 信息 | 基线设备未响应 | ## HTML 报告 每次 `--full-assessment` 都会生成一个自包含的 HTML 报告,包含: - **严重程度仪表板** — 徽章计数(严重/高/中/低/信息)、颜色条、摘要统计 - **风险评分** — 每台设备 0-100 的评分及风险等级标签 - **所有发现表格** — 所有主机的每项发现,按严重程度排序 - **每主机部分** — 每个设备的可折叠部分,包含发现卡片、开放端口表、EOL 状态 - **发现卡片** — 严重程度徽章、标题、“发现了什么”、“这意味着什么”(通俗英语)、“该做什么”(编号步骤)、证据、CVE ID - **建议** — 优先行动列表 报告可在任何浏览器中打开,无需互联网连接。 ## 设备识别 NetWatch 通过结合来自 14 个不同来源的证据自动识别网络设备。每个来源提供一个厂商、型号、版本或设备类型及其置信度评分。融合算法汇总一致的来源(对多来源一致性给予奖励)并惩罚冲突证据。 ### 快速资产清单 要在不运行安全检查的情况下查看网络上的设备: ``` python3 netwatch.py --identify --target 192.168.1.0/24 ``` 这将运行带有 banner 抓取的端口扫描并打印设备识别表。无安全分析,无报告 — 只是快速清单。 ### 证据来源 | 来源 | 读取内容 | 置信度 | |--------|--------------|------------| | MAC OUI | MAC 地址中的 IEEE 厂商前缀 | 0.40-0.45 | | nmap OS | OS 指纹推测 | 不定 | | HTTP fingerprint | 来自 Web UI 的设备类型、型号、固件 | 0.50+ | | HTTP headers | Server, X-Powered-By 响应标头 | 0.20-0.50 | | TLS certificate | CN, issuer, organization 字段 | 0.35 | | SSH banner | SSH 守护进程标识字符串 | 0.10-0.70 | | UPnP | SSDP 制造商、型号、设备类型 | 0.75 | | SNMP sysDescr | 来自 SNMP MIB 的系统描述 | 0.85 | | Wappalyzer | CPE 字符串和技术类别 | 0.30-0.45 | | mDNS/Zeroconf | 服务类型广播 | 0.55 | | JA3S | TLS 握手指纹数据库 | 0.50 | | FTP banner | FTP 服务器软件标识 | 0.25-0.35 | | Port heuristics | 开放端口组合模式 | 0.10-0.70 | | nmap services | 服务产品和版本字段 | 0.45 | 识别结果显示在: - 终端设备清单表(扫描期间及通过 `--identify`) - HTML 报告拓扑卡片和设备清单部分 - JSON 导出的 `device_identities` 部分 - 交互模式菜单选项 [8] Device Inventory ## 严重程度等级 | 等级 | 颜色 | CVSS 范围 | 含义 | 行动时机 | |---|---|---|---|---| | **CRITICAL** | 红色 | >= 9.0 | 默认凭据、可利用的 CVE、SSL 2.0 | 今天 | | **HIGH** | 橙色 | 7.0-8.9 | Telnet/FTP 开放、证书过期、TLS 1.0、EOL 软件 | 本周内 | | **MEDIUM** | 黄色 | 4.0-6.9 | 自签名证书、UPnP 暴露、非法设备、缺少 HSTS | 计划修复 | | **LOW** | 蓝色 | < 4.0 | EOL 临近、缺少 X-Frame-Options、设备 IP 变更 | 跟踪并计划 | | **INFO** | 灰色 | - | 设备已识别、证书详情、DNS 检查通过 | 无需行动 | ## 项目结构 ``` netwatch/ ├── netwatch.py # Entry point — CLI, scan pipeline, setup wizard ├── requirements.txt # Python dependencies ├── README.md # This file │ ├── config/ │ └── settings.py # All constants, timeouts, scan profiles, menu options │ ├── core/ │ ├── scanner.py # nmap wrapper (ScanResult, HostInfo, PortInfo) │ ├── port_scanner.py # Masscan pipeline + PortScanOrchestrator │ ├── banner_grabber.py # Concurrent raw socket banner grabbing │ ├── http_fingerprinter.py # HTTP device/firmware fingerprinting │ ├── nse_scanner.py # Nmap Scripting Engine integration │ ├── auth_tester.py # Default credential testing (HTTP, device-specific) │ ├── input_parser.py # Flexible target format parsing │ ├── network_utils.py # Subnet detection, IP helpers, WSL detection │ ├── findings.py # Finding dataclass, Severity enum, FindingRegistry │ ├── risk_scorer.py # Per-device risk scoring (0-100) │ ├── cache_manager.py # Unified CVE + EOL cache (data/cache/) │ ├── cve_checker.py # CVE lookup + CVECacheBuilder (OSV.dev) │ ├── ssl_checker.py # TLS certificate, cipher suite, JA3S fingerprinting │ ├── ssh_checker.py # SSH version, algorithms, KEXINIT analysis │ ├── smb_checker.py # SMBv1, EternalBlue, shares, NTLM disclosure │ ├── ftp_checker.py # Anonymous FTP, STARTTLS │ ├── snmp_checker.py # SNMP community strings, sysDescr (pysnmp v4+v7) │ ├── web_checker.py # HTTP headers, admin panels, Wappalyzer │ ├── dns_checker.py # DNS hijack and rebinding detection │ ├── upnp_checker.py # SSDP discovery, UPnP risk assessment │ ├── mdns_checker.py # mDNS/Zeroconf device discovery │ ├── arp_checker.py # ARP spoofing detection │ ├── baseline.py # Rogue device baseline comparison │ ├── scan_history.py # Scan snapshot persistence and diffing │ ├── module_manager.py # Downloadable data module system │ └── update_manager.py # Version check and self-update │ ├── eol/ │ ├── checker.py # EOL API queries and version comparison │ ├── cache.py # Per-product JSON cache │ └── product_map.py # 150+ software name -> endoflife.date slug mappings │ ├── ui/ │ ├── menu.py # Old-style numbered menu (no-args mode) │ ├── display.py # Rich terminal tables, progress bars, banners │ ├── export.py # JSON and HTML report generation │ ├── interactive_controller.py # Interactive mode (-i) with multi-level menus │ └── templates/ │ └── report.html.j2 # Jinja2 HTML report template │ └── data/ ├── default_credentials.json # Factory-default credentials database ├── baseline.json # Saved device baseline (--save-baseline) ├── cache/ │ ├── cve_cache.json # CVE data keyed by product:version │ ├── eol_cache.json # EOL data keyed by product slug │ └── cache_meta.json # Cache update timestamps ├── history/ # Gzip scan snapshots (auto-saved) └── modules/ # Downloaded data modules ``` ## 故障排除 **nmap not found** ``` # Linux sudo apt-get install nmap # macOS brew install nmap # Windows — 从 nmap.org 下载,确保勾选 "Add to PATH" ``` **Permission denied / OS detection not working** FULL, STEALTH 和 SMB 配置需要提升权限。如果没有 root,这些配置会自动回退到非 root 标志(禁用 OS 检测和 SYN 扫描,但端口/版本扫描仍然有效)。 ``` # 完整功能: sudo python3 netwatch.py --target 192.168.1.0/24 --profile FULL ``` **WSL suggests wrong network (172.x.x.x)** 在 WSL 上,NetWatch 检测到虚拟适配器并回退到 `192.168.1.0/24`。如果您的家庭网络使用不同的子网,请使用 `--target` 指定: ``` python3 netwatch.py --target 192.168.0.0/24 ``` **Cache warnings at scan start** ``` WARNING: CVE data is 12 days old — run: python netwatch.py --update-cache ``` 扫描在数据过期的情况下仍能正常工作。运行 `--update-cache` 进行刷新。 **SNMP checks not working** NetWatch 同时支持 pysnmp v4(同步)和 v7(异步)。如果您看到导入错误,请更新 pysnmp: ``` pip install --upgrade pysnmp ``` ## 免责声明 — 仅限授权使用 对您不拥有或未获得测试授权的系统运行网络扫描可能属于**非法行为**,无论意图如何。作者不对滥用行为承担责任。 NetWatch **完全非破坏性且只读**。它不利用漏洞、不传递 payload,也不修改任何被扫描设备上的配置。`--check-defaults` 凭据测试使用常见的出厂默认值,并不对账户进行暴力破解。 ## 许可证 MIT License — Copyright 2024 NetWatch Contributors ## 致谢 - [nmap](https://nmap.org) — 扫描引擎 - [python-nmap](https://pypi.org/project/python-nmap/) — Python nmap 接口 - [endoflife.date](https://endoflife.date) — EOL 数据 API - [OSV.dev](https://osv.dev) — 漏洞数据库 - [Rich](https://rich.readthedocs.io) — 终端格式化 - [Jinja2](https://jinja.palletsprojects.com) — HTML 报告模板 - [cryptography](https://cryptography.io) — TLS 证书检查 - [danielmiessler/SecLists](https://github.com/danielmiessler/SecLists) — 凭据和 SNMP 列表 - [ihebski/DefaultCreds-cheat-sheet](https://github.com/ihebski/DefaultCreds-cheat-sheet) — 厂商凭据 - [enthec/webappanalyzer](https://github.com/AliasIO/wappalyzer) — Web 技术检测 - [salesforce/ja3](https://github.com/salesforce/ja3) — TLS 指纹识别 - [many-passwords](https://github.com/many-passwords/many-passwords) — 摄像头/DVR 凭据
标签:HTML报告生成, IT运维, Masscan, Nmap, Python, Qt框架, Socks5代理, 代码生成, 子域名侦测, 实时处理, 家庭网络安全, 密码管理, 开源安全工具, 插件系统, 操作系统指纹识别, 数据统计, 无后门, 服务识别, 渗透测试工具, 端口扫描, 网络安全, 网络扫描器, 虚拟驱动器, 逆向工具, 逆向工程平台, 隐私保护, 默认凭据检测