vinayagrawal890/vulnerability-scanner
GitHub: vinayagrawal890/vulnerability-scanner
一个零依赖的纯 Python 迷你漏洞扫描器,通过多线程端口扫描、Banner 抓取和启发式规则检测对单台主机进行基础安全评估并输出分级报告。
Stars: 0 | Forks: 0
# 🔍 迷你漏洞扫描器
一个轻量级、无依赖的 Python 工具,用于对单个主机进行基础漏洞评估。作为一个迷你项目而开发,旨在探索**渗透测试**和**漏洞扫描**的基础知识——包括端口发现、服务指纹识别、过时软件检测和弱配置检查——仅使用 Python 的标准库。
## ✨ 功能
- **端口扫描** — 快速、多线程的 TCP connect 扫描(快速 / 标准 top-150 / 全部 1–65535 / 自定义范围)
- **Banner 抓取** — 获取服务 banner(SSH 版本字符串、HTTP `Server` 头、FTP/SMTP 问候语等)
- **过时软件检测** — 使用版本模式启发式方法标记已知过时版本的 OpenSSH、Apache、nginx、vsftpd、IIS、MySQL 和 PHP
- **弱配置检查**
- Telnet 暴露(未加密)
- 允许 FTP 匿名登录
- 暴露的 Redis / MongoDB 且无经验证 auth
- RDP / SMB / VNC 可达
- HTTPS 上过时的 TLS/SSL 协议版本
- **简单报告** — 控制台输出加上自动生成的 `JSON`(机器可读)和 `Markdown`(人类可读)报告,按严重程度排序
## 📦 环境要求
- Python 3.7+
- 无需第三方包 — 仅使用 `socket`、`ssl`、`concurrent.futures`、`argparse`、`json`、`re`
## 🚀 用法
```
python3 vulnscan.py [options]
```
### 选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `--ports` | `quick`、`standard`、`full`、范围 (`20-1024`) 或列表 (`22,80,443`) | `standard` |
| `--timeout` | Socket 超时时间(秒) | `1.0` |
| `--threads` | 并发扫描线程数 | `100` |
| `--out` | 输出报告文件名前缀 | `vulnscan_report` |
### 示例
```
# 常见端口快速扫描
python3 vulnscan.py scanme.nmap.org --ports quick
# 本地服务器的标准扫描(前 ~150 端口)
python3 vulnscan.py 192.168.1.10
# 全部端口范围,更短的 timeout,更多线程
python3 vulnscan.py 192.168.1.10 --ports full --timeout 0.5 --threads 200
# 自定义端口范围及自定义报告名称
python3 vulnscan.py example.com --ports 20-1024 --out example_scan
```
## 📄 示例输出
```
======================================================================
VULNERABILITY SCAN REPORT
======================================================================
Target : 192.168.1.10 (192.168.1.10)
Scan time : 2026-06-22T06:38:16+00:00
Ports scanned : 150
Open ports : 3
----------------------------------------------------------------------
[ High ] Port 80 (HTTP): Apache httpd version is older than 2.4.x - EOL branch, missing many security patches.
[ Medium] Port 3389 (RDP): RDP is exposed - ensure NLA is enforced, strong passwords/MFA are required.
[ Info ] Port 22 (SSH): Open port detected - no specific issue identified by heuristics.
======================================================================
Summary -> High: 1, Medium: 1, Info: 1
======================================================================
```
报告也会作为 `vulnscan_report.json` 和 `vulnscan_report.md` 保存在工作目录中。
## 🧠 工作原理
1. **解析与扫描** — 解析主机名,然后使用 `ThreadPoolExecutor` 在选定的端口范围内并行尝试 TCP 连接。
2. **指纹识别** — 对于每个开放端口,发送适当的协议最小探测(例如 HTTP 的 `HEAD /`)并读取响应/banner。
3. **分析** — 通过基于正则表达式的版本规则和特定端口的配置检查来运行 banner。
4. **报告** — 汇总发现的问题,按严重程度(`High` → `Medium` → `Low` → `Info`)排序,并写入控制台和文件报告。
## ⚠️ 局限性
- 仅支持 TCP connect 扫描(无 SYN/隐蔽扫描,无 UDP)
- 版本检测规则是说明性的模式匹配,**并非**实时的 CVE 数据库 — 对于生产级别的评估,请结合使用 **Nmap**、**Nikto**、**OpenVAS** 或 **Nessus** 等工具
- 专为**一次扫描一个主机**而设计
## 🛣️ 可能的扩展
- 从目标列表文件进行多主机扫描
- 根据检测到的服务版本,通过 NVD API 进行实时 CVE 查询
- 支持 UDP 端口扫描
- 带有图表的 HTML 报告输出
## 📚 学习成果
本项目展示了现实世界漏洞扫描器背后的核心概念:
- 端口扫描器如何识别存活服务
- Banner 抓取如何揭示软件指纹
- 自动化工具如何标记过时/易受攻击的版本
- 基础的漏洞报告是如何构建并按严重程度划分优先级的
## 📝 许可证
本项目提供用于教育目的。请负责任地使用,并且仅针对您被授权测试的系统。
标签:Python, 加密, 实时处理, 插件系统, 数据统计, 无后门, 漏洞扫描器, 端口扫描, 逆向工具