mukidulislamzihad/scanpro

GitHub: mukidulislamzihad/scanpro

一款轻量级纯 Python 漏洞扫描器,将端口扫描、CVE 查询与 Web 安全审计整合为单一工具并提供多格式报告导出。

Stars: 1 | Forks: 0

# 🛡️ ScanPro **一款轻量级、多合一的网络与 Web 应用漏洞扫描器 —— 使用纯 Python 编写,提供 CLI 和跨平台桌面 GUI。** [![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)](#desktop-gui) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#contributing) 端口扫描 • 服务/banner 识别 • 自动化 CVE 查询 (NVD) • Web 头部与 TLS 审计 • HTML/JSON/PDF 报告 • 扫描历史 由 **[Mukidul Islam Zihad](https://github.com/mukidulislamzihad)** 打造 — [GitHub](https://github.com/mukidulislamzihad) · [LinkedIn](https://www.linkedin.com/in/mukidul-islam-zihad)
## 为什么选择 ScanPro? `nmap` 是端口扫描的行业标准,本项目并不试图取代它。ScanPro 的存在是为了解决另一个问题:**围绕快速安全评估的手动拼接工作**。 典型的侦察工作流程如下:运行 `nmap` → 肉眼观察开放端口 → 为 Web 层单独运行 `nikto`/`whatweb` → 手动对照 CVE 数据库交叉比对版本 → 为客户撰写报告。对于一个单一目标来说,这需要使用 3-4 个工具并进行大量的复制粘贴。 ScanPro 将其简化为 **一条命令(或在 GUI 中点击一次)**: | | ScanPro | 典型的多工具工作流 | |---|---|---| | 端口扫描 + banner 获取 | ✅ 内置 | `nmap` | | 针对检测到的版本查询 CVE | ✅ 自动 (NVD API) | 手动 / 独立工具 | | Web 安全头部与 TLS 审计 | ✅ 内置 | `nikto` / `testssl.sh` | | 暴露的 `.git` / `.env` 检查 | ✅ 内置 | 手动 | | 多目标扫描 | ✅ 逗号分隔列表 | 脚本循环 | | 扫描历史 | ✅ 内置,本地化 | 手动记录 | | 可直接发送的 HTML / PDF 报告 | ✅ 一键生成 | 独立的报告工具 | | 安装 | `pip install -r requirements.txt` | 多个二进制文件/包 | | 面向非 CLI 用户的 GUI | ✅ `gui.py` | ❌ | **当你需要以下需求时,请使用 ScanPro:** 一款快速、单文件、无重度依赖的工具,用于授权的侦察、快速面向客户的报告、CTF 竞赛、学习漏洞扫描器的底层工作原理,或者作为 `nmap` + `nikto` 的初学者友好型替代品或辅助工具。 **当你需要以下功能时,请转而使用 `nmap`:** OS 指纹识别、隐蔽/规避扫描技术、IPv6,或过去 25 年间积累的数百个 NSE 脚本 —— ScanPro 并不试图在这些领域竞争。 ## 功能 - 🔍 **端口扫描 + 服务/banner 识别** —— 无需 `nmap` 二进制文件,纯 Python sockets - 🌍 **全局 IP 解析** —— 每次扫描(网络、Web、子域名)都会在主机名旁边显示解析到的 IP - 🧬 **自动 CVE 查询** —— 通过 [NVD API](https://nvd.nist.gov/developers/vulnerabilities) 针对检测到的服务版本进行查询 - 🌐 **Web 应用检查** —— 缺失的安全头部、TLS/SSL 配置错误、证书过期、暴露的敏感路径(`.git/config`、`.env` 等) - 🕵️ **Server 指纹回退机制** —— 如果 `Server` 头部被隐藏,ScanPro 会尝试一些低噪音的启发式方法(session cookie 名称、默认错误页面的措辞)来猜测底层的技术栈 - 🧭 **尽力而为的 OS 指纹识别** (`--os-detect`) —— 轻量级的基于 TTL 的 OS 家族猜测(Linux/Windows/其他),在思路上类似于 `nmap -O`,但并非绝对确定 - 🥷 **隐蔽/定时模式** (`--stealth`) —— 随机端口顺序、抖动延迟和较低的并发性,因此扫描在简单的基于速率的 IDS 看来不会像是一次单一的爆发(仅为定时规避,非包级别的 SYN 隐蔽扫描) - 🖥️ **桌面 GUI**(Windows/macOS/Linux,Tkinter —— 无需额外的 GUI 依赖)与 CLI 并行提供 - 🎯 **多目标扫描** —— 在一次运行中扫描多个主机(在 GUI 中以逗号分隔) - 🕘 **本地扫描历史** —— 每次扫描都会保存在你的机器上;可重新查看并重新导出任何过去的结果 - ☀️🌙 **GUI 中的亮色/暗色主题切换** - 📊 **带有百分比的实时进度条**,感知阶段(网络 → CVE → Web) - 🎨 彩色编码的终端和 GUI 输出,按严重程度排序(critical/high/medium/low) - 📄 **可导出的 HTML / JSON / PDF / CSV / Markdown 报告** —— 随时准备附加到客户交付物中 - 🧭 **子域名枚举** —— 通过证书透明度日志(crt.sh,无需 API key)—— 每个活跃的子域名也会检查问题,而不仅仅是被发现 - 🩹 **内置修复建议器** —— 每个发现(头部问题、TLS 问题、CVE、nuclei 匹配)都带有一个简单的英文“如何修复”的建议,完全离线/基于规则 - 🧪 **可选的 `nuclei` 集成** —— 如果安装了 `nuclei`,ScanPro 会运行它并将结果整合到同一份报告/评分中 - 🧮 **总体安全评分(0-100,A-F 等级)** —— 一个汇总所有扫描类型中每一个发现的单一数值 - 🐳 **用于 CLI 的 Docker 镜像** —— 无需在本地安装 Python 即可运行 ScanPro - ⚡ 多线程扫描,可配置的线程数与超时时间 - 📦 最小化依赖 —— 用于 PDF 导出的 `requests` + `fpdf2` ## 目录 - [安装](#installation) - [桌面 GUI](#desktop-gui) - [CLI 用法](#cli-usage) - [CLI 选项](#cli-options) - [报告示例](#sample-report) - [项目结构](#project-structure) - [路线图](#roadmap--ideas-for-contributors) - [免责声明](#️-legal-notice) - [贡献](#contributing) - [作者](#author) - [许可证](#license) ## 安装 ``` git clone https://github.com/mukidulislamzihad/scanpro.git cd scanpro python3 -m venv venv && source venv/bin/activate # optional but recommended pip install -r requirements.txt ``` ## 桌面 GUI ScanPro 自带了一个跨平台的桌面 GUI(Windows / macOS / Linux), 使用 Tkinter 构建 —— 无需额外的 GUI 依赖。 ``` python3 gui.py ``` 填入一个或多个目标(逗号分隔),调整端口/线程/超时/CVE 选项,点击 **Start Scan**,并观看实时彩色编码的结果流入 日志面板,同时显示实时的进度百分比。扫描完成后,使用 **Save HTML / Save JSON / Save PDF** 进行导出 —— 文件默认保存到你的 **Downloads** 文件夹。每次扫描也会保存到 **History** 选项卡中,你可以在此 重新查看并导出任何过去的结果。从窗口右上角切换 **☀ Light mode / 🌙 Dark mode** 以符合你的偏好。 ### Docker (仅限 CLI) 包含了一个 `Dockerfile`,用于在无需本地安装 Python 的情况下运行 CLI (GUI 需要显示器,因此未包含在镜像中): ``` docker build -t scanpro . docker run --rm scanpro example.com --no-network # web-only scan, prints to terminal docker run --rm -v "$PWD:/out" scanpro example.com -o /out/report.html # save report to host ``` ### 构建独立可执行文件(可选) 为了在无需安装 Python 的情况下将 GUI 作为单个 `.exe` / `.app` / Linux 二进制文件进行分发, 请在目标操作系统上使用 [PyInstaller](https://pyinstaller.org/) (PyInstaller 不进行交叉编译 —— 请在 Windows 上构建 Windows 的 `.exe`,在 macOS 上构建 macOS 的 `.app`,等等): ``` pip install pyinstaller pyinstaller --noconsole --onefile --name ScanPro gui.py ``` 打包后的二进制文件将在 `dist/` 目录下创建。 ## CLI 用法 ``` # Full scan (network + web) with default port range 1-1024 python3 main.py example.com # Only web app scan python3 main.py https://example.com --no-network # Only network scan on specific ports python3 main.py 192.168.1.10 --no-web --ports 22,80,443,3306 # Custom port range, more threads, save HTML report python3 main.py example.com --ports 1-65535 --threads 200 -o report.html # Save as JSON instead python3 main.py example.com -o report.json # Use an NVD API key for higher CVE lookup rate limits python3 main.py example.com --nvd-api-key YOUR_KEY_HERE # Also enumerate subdomains (via crt.sh) and check each one for issues python3 main.py example.com --subdomains --subdomain-limit 50 # Also run nuclei (if installed) against the web target python3 main.py example.com --nuclei --nuclei-severity critical,high # Best-effort OS fingerprint (TTL-based) alongside the port scan python3 main.py example.com --os-detect # Stealth/timing mode: randomized port order, jittered delays, lower concurrency python3 main.py example.com --stealth # Export as CSV or Markdown instead of HTML/JSON python3 main.py example.com -o report.csv python3 main.py example.com -o report.md ``` ## CLI 选项 | 标志 | 描述 | |---|---| | `--ports` | 用于网络扫描的端口范围/列表(默认 `1-1024`) | | `--no-network` | 跳过网络/端口扫描 | | `--no-web` | 跳过 Web 应用扫描 | | `--no-cve` | 跳过 CVE 查询步骤 | | `--threads` | 用于端口扫描的并发线程数(默认 `100`) | | `--timeout` | Socket 超时时间(以秒为单位,默认 `1.0`) | | `--os-detect` | 尽力而为的基于 TTL 的 OS 指纹识别(类似于轻量级的 `nmap -O` —— 并非绝对确定) | | `--stealth` | 基于定时的规避:随机端口顺序、抖动延迟、较低的并发性(非包级别的 SYN 隐蔽扫描) | | `-o, --output` | 将报告保存为 `.html`、`.json`、`.csv` 或 `.md` | | `--nvd-api-key` | 可选的 NVD API key(每 30 秒请求从 5 次提升至 50 次) | | `--subdomains` | 通过 crt.sh 枚举子域名并检查每个子域名是否存在问题 | | `--subdomain-limit` | 主动探测的已发现子域名的最大数量(默认 `30`) | | `--nuclei` | 如果已安装,则针对目标的 Web 应用运行 `nuclei` | | `--nuclei-severity` | 传递给 nuclei 的逗号分隔的严重性级别,例如 `critical,high` | 现在,跨网络、Web、子域名和 nuclei 检查的每一个发现也都带有一条简短的**修复建议**,并且报告中包含一个总体的**安全评分(0-100,A-F 等级)**,将所有内容汇总为一个数字。 ## 报告示例 运行扫描会生成一份彩色编码的终端摘要,并且配合 `-o report.html`, 生成一份独立的深色主题 HTML 报告,其中列出了开放端口、banner、匹配的 CVE (带有 CVSS 分数),以及按严重性排序的 Web 层发现 —— 随时准备交给 客户或附在渗透测试报告中。 **运行中的桌面 GUI** —— 实时扫描输出、开放端口和实时流入的 CVE 匹配: ![ScanPro GUI 运行扫描](https://raw.githubusercontent.com/mukidulislamzihad/scanpro/main/screenshots/gui-scan.png) **扫描摘要** —— 按严重性排序的 Web 发现和一目了然的结果概述: ![ScanPro 扫描摘要](https://raw.githubusercontent.com/mukidulislamzihad/scanpro/main/screenshots/gui-summary.png) ## 项目结构 ``` scanpro/ ├── main.py # CLI entry point ├── gui.py # Desktop GUI (Tkinter) entry point — "ScanPro" ├── modules/ │ ├── network_scan.py # Port scanning + banner grabbing │ ├── cve_lookup.py # NVD API integration │ ├── web_scan.py # HTTP headers, TLS, misconfig checks │ ├── subdomain_enum.py# Subdomain discovery (crt.sh) + per-subdomain checks │ ├── nuclei_scan.py # Optional nuclei integration │ ├── remediation.py # Rule-based fix suggestions │ ├── report.py # Console summary + HTML/CSV/Markdown report │ └── colors.py # Terminal color helpers ├── screenshots/ # README screenshots ├── Dockerfile └── requirements.txt ``` ## ⚠️ 免责声明 **请仅对你拥有的或已获得明确书面授权测试的系统运行此工具。** 在大多数司法管辖区,未经授权扫描系统是非法的。此工具旨在用于授权的渗透测试、红蓝对抗演练以及针对你自己基础设施的安全研究。 ## 作者 **Mukidul Islam Zihad** GitHub: [github.com/mukidulislamzihad](https://github.com/mukidulislamzihad) LinkedIn: [linkedin.com/in/mukidul-islam-zihad](https://www.linkedin.com/in/mukidul-islam-zihad) ## 许可证 MIT — 请参阅 [LICENSE](LICENSE)。
标签:Claude, CVE检测, Python, Web安全, 加密, 密码管理, 插件系统, 数据统计, 无后门, 漏洞扫描器, 端口扫描, 网络安全, 蓝队分析, 请求拦截, 逆向工具, 隐私保护