NoCoderRandom/netwatch
GitHub: NoCoderRandom/netwatch
一款人性化的局域网安全审计工具,将 nmap 的深度扫描能力封装为易用界面,自动完成设备发现、漏洞检测和报告生成。
Stars: 2 | Forks: 0
# NetWatch
**人性化网络安全审计 — 由 nmap 驱动,为所有人打造。**
[]
[](https://www.python.org/downloads/)
[](https://github.com)
[](LICENSE)
[](https://nmap.org)
[](https://osv.dev)
[](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代理, 代码生成, 子域名侦测, 实时处理, 家庭网络安全, 密码管理, 开源安全工具, 插件系统, 操作系统指纹识别, 数据统计, 无后门, 服务识别, 渗透测试工具, 端口扫描, 网络安全, 网络扫描器, 虚拟驱动器, 逆向工具, 逆向工程平台, 隐私保护, 默认凭据检测