abhyyyy0990/vulnerability-scanner
GitHub: abhyyyy0990/vulnerability-scanner
一个基于 Python 标准库的迷你漏洞扫描器,通过端口扫描、banner 抓取和弱配置检查生成安全报告,适合网络安全学习入门。
Stars: 0 | Forks: 0
# 漏洞扫描器(迷你项目)
一款简单的 Python 工具,用于扫描目标主机的开放端口、抓取服务 banner、标记潜在过时的软件版本或脆弱的配置,并生成可读的漏洞报告。
## ⚠️ 仅限授权使用
仅扫描您拥有或**获得明确书面授权**进行测试的主机。
在大多数司法管辖区,未经授权扫描系统是非法的(例如,根据美国《计算机欺诈和滥用法》)。适合学习的练习目标:
- `127.0.0.1`(您自己的机器)
- 您控制的虚拟机(例如 Metasploitable2、DVWA)
- `scanme.nmap.org`(由 Nmap 作者明确提供用于扫描练习)
## 文件
| 文件 | 用途 |
|-------------------------|-------------------------------------------------------|
| `scanner.py` | 主入口点:端口扫描、banner 抓取、配置检查 |
| `outdated_versions.py` | 包含已知过时软件版本的小型参考表 |
| `report.py` | 将扫描结果转换为格式化的文本报告 |
## 环境要求
Python 3.7+。无外部依赖 —— 仅使用标准库
(`socket`、`ssl`、`concurrent.futures`、`argparse`)。
## 用法
```
# 扫描 localhost 的默认范围(端口 1-1024)
python3 scanner.py 127.0.0.1
# 扫描特定范围
python3 scanner.py 192.168.1.10 --ports 1-500
# 扫描特定端口
python3 scanner.py example.com --ports 22,80,443,3306,8080
# 调整 timeout / concurrency / output file
python3 scanner.py 127.0.0.1 --ports 1-1024 --timeout 0.3 --workers 300 --out my_report.txt
```
## 检查内容
1. **开放端口** —— 尝试与范围内的每个端口建立 TCP 连接,
使用线程池以提高速度。
2. **Banner 抓取** —— 对于每个开放端口,尝试读取服务的
问候/响应(适用于 SSH、FTP、SMTP 等),如果失败则回退到
HTTP HEAD 请求,然后对类似 HTTPS 的端口尝试 TLS 握手。
3. **过时软件检测** —— 将 banner 与一个小型
本地表(`outdated_versions.py`)进行匹配,该表包含已知的旧版软件
(例如 `vsftpd 2.3.4`,旧版的 OpenSSH/Apache/nginx)。
4. **弱配置检查** —— 标记一些常见的风险设置,
例如开放 Telnet、无认证提示的 Redis/MongoDB,或者
在没有 NLA 上下文的情况下暴露的 RDP。
5. **报告生成** —— 撰写一份纯文本报告,按严重程度总结风险
发现结果,并提供按端口划分的详细明细。
## 局限性(请正视这些问题 —— 这也是学习的一部分!)
- 过时软件表仅用于说明,并非真正的 CVE 数据源。生产级
扫描器会查询类似 NVD(国家漏洞数据库)API 这样的服务,而不是使用硬编码的 dict。
- Banner 抓取是被动的/尽力而为的 —— 某些服务根本不会透露
版本信息,而且这不像 Nmap 的服务版本检测(`-sV`)那样进行深度的协议指纹识别。
- 不进行任何漏洞利用尝试 —— 这仅用于检测和报告,
不验证可利用性。
- 使用 TCP connect 扫描(而非 SYN/隐身扫描),因此与
专业扫描器相比,它的速度较慢,且更容易被日志/IDS 发现。
## 扩展本项目
如果您想在此基础上进行开发,建议的后续步骤:
- 添加 `--json` 输出格式以生成机器可读的报告
- 从 NVD API 获取真实的 CVE 数据,而不是使用本地 dict
- 添加 UDP 端口扫描
- 通过 TTL/window 大小分析添加基本的 OS 指纹识别
- 添加 HTML 报告模板,而不是纯文本
标签:Banner抓取, Python, 加密, 插件系统, 数据统计, 无后门, 漏洞扫描器, 端口扫描, 逆向工具