Vignesh1231234/Cybersecurity-Vulnerability-Scanner
GitHub: Vignesh1231234/Cybersecurity-Vulnerability-Scanner
一款 Python 安全扫描工具,将端口扫描、服务检测、TLS/SSL 分析和 HTTP 标头审计整合为统一 pipeline,用于自动化识别 Web 应用与网络中的常见安全配置问题。
Stars: 0 | Forks: 0
概述
VulnScan 是一个基于 Python 的安全扫描工具包,它将 TCP 端口扫描、服务/banner 检测、TLS/SSL 配置分析以及 HTTP 安全标头审计结合到一个单一的、可扩展的 pipeline 中。它专为安全工程师、学生和开发者而设计,提供了一个干净、经过充分测试的代码库,方便他们学习、扩展,或在授权的渗透测试和内部安全审查中使用。
与临时脚本不同,VulnScan 被构建为一个正规的 Python 包,拥有文档完善的架构、测试套件、带类型的数据模型,以及机器可读 (JSON) 和人类可读 (HTML / 控制台) 的报告。
✨ 功能
模块 作用
Port Scanner 跨自定义端口范围或精选的 top-30 列表的多线程 TCP connect 扫描
Service Detector 通过端口启发式方法和实时 banner grabbing 识别可能的服务
Vulnerability Matcher 标记与已知存在漏洞的软件版本的精选数据库相匹配的 banner
TLS/SSL Analyzer 检查证书有效性/过期时间、协商的协议版本以及是否接受旧协议 (SSLv3/TLS 1.0/1.1)
HTTP Analyzer 审计安全标头 (HSTS, CSP, X-Frame-Options 等)、cookie 标志、server 指纹识别以及 HTTPS 强制执行情况
Baseline Heuristics 标记常见的高风险暴露服务 (Telnet、RDP、Redis、未经认证的 Docker API、明文邮件协议)
Reporting Rich 控制台表格、结构化 JSON 以及自包含的带样式 HTML 报告
📦 安装
bash
git clone https://github.com/yourusername/vulnscan.git
cd vulnscan
pip install -e .
要求 Python 3.9+。对于开发(测试、代码检查):
bash
pip install -e ".[dev]"
🚀 用法
你必须明确确认已获授权才能运行扫描——请参阅法律与合规使用。
bash
# 针对前 30 个端口列表进行基本扫描
vulnscan example.com --i-have-authorization
# 扫描特定端口
vulnscan example.com -p 22,80,443,8080 --i-have-authorization
# 扫描端口范围
vulnscan 10.0.0.5 -p 1-1024 --i-have-authorization
# 生成 JSON + HTML 报告
vulnscan example.com --i-have-authorization --json report.json --html report.html
# 跳过 HTTP/TLS 分析(仅端口扫描 + banner)
vulnscan example.com --i-have-authorization --skip-http --skip-ssl
# 调整并发和超时以适应较慢/不稳定的网络
vulnscan example.com --i-have-authorization -t 3.0 -w 50
CLI 参考
usage: vulnscan [-h] [-p PORTS] [-t TIMEOUT] [-w WORKERS] [--skip-http]
[--skip-ssl] [--json PATH] [--html PATH] [-v] [--version]
[-I]
target
positional arguments:
target 要扫描的主机名或 IP 地址 (例如 example.com)
options:
-h, --help 显示此帮助信息并退出
-p, --ports PORTS 要扫描的端口,例如 '22,80,443' 或 '1-1024'。
-t, --timeout TIMEOUT 每个端口的连接超时时间(秒)。 (默认:1.5)
-w, --workers WORKERS 最大并发端口扫描线程数。 (默认:200)
--skip-http 跳过 HTTP 标头分析。
--skip-ssl 跳过 TLS/SSL 分析。
--json PATH 将 JSON 报告写入 PATH。
--html PATH 将 HTML 报告写入 PATH。
-v, --verbose 启用详细/调试日志记录。
--version 显示程序的版本号并退出
-I, --i-have-authorization
确认你已获得扫描此目标的明确书面授权。
作为库使用
python
from vulnscan.core.scanner import VulnScanner
from vulnscan.reporting.report_generator import ReportGenerator
scanner = VulnScanner(timeout=1.5, max_workers=200)
result = scanner.scan("example.com", ports=[22, 80, 443])
reporter = ReportGenerator()
reporter.print_console(result)
reporter.to_json(result, "report.json")
reporter.to_html(result, "report.html")
🖼 示例报告
对一个故意配置错误的主机运行扫描会产生如下控制台输出:
──────────────────────── VulnScan 报告 — 10.0.0.42 ─────────────────────────
开放端口
┏━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 端口 ┃ 协议 ┃ 服务 ┃ Banner ┃
┡━━━━━━╇━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 22 │ tcp │ ssh │ SSH-2.0-OpenSSH_6.6.1 │
│ 80 │ tcp │ http │ - │
│ 6379 │ tcp │ redis │ - │
└──────┴──────────┴─────────┴──────────────────────────────────────────────┘
发现
┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 严重性 ┃ 标题 ┃端口┃ 建议 ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│ HIGH │ Redis 暴露在网络中 │6379 │ 绑定到 localhost... │
│ HIGH │ 检测到过时的 OpenSSH 版本 │22 │ 升级 OpenSSH... │
│ MEDIUM │ 缺少安全标头:HSTS │80 │ 添加 Strict-Transport…│
└──────────┴──────────────────────────────────┴─────┴───────────────────────┘
摘要: INFO: 0 LOW: 2 MEDIUM: 3 HIGH: 2 CRITICAL: 0
--html 标志会生成一个深色主题的、自包含的报告,适合与利益相关者分享——无需外部资源。
🏗 架构
vulnscan/
├── cli.py # 基于 argparse 的 CLI 入口点
├── core/
│ ├── models.py # Finding, OpenPort, ScanResult, Severity dataclasses/enums
│ ├── port_scanner.py # 多线程 TCP connect 扫描器
│ ├── service_detector.py # 端口启发式方法 + banner grabbing
│ ├── ssl_analyzer.py # 证书 + 协议/密码套件检查
│ ├── http_analyzer.py # 安全标头 / cookie / HSTS 检查
│ ├── vuln_matcher.py # 针对 banner 的正则签名匹配
│ └── scanner.py # 将所有模块协调为一个 ScanResult
├── reporting/
│ ├── report_generator.py # 控制台 (Rich), JSON, HTML 输出
│ └── templates/report.html.j2 # Jinja2 HTML 报告模板
├── data/
│ └── vuln_signatures.json # 精选的已知漏洞版本签名
└── utils/
└── logger.py # 基于 Rich 的结构化日志记录
设计原则:
非利用性设计——漏洞匹配器根据公开披露且已修补的 CVE 来标记版本字符串。它从不尝试触发、验证或利用漏洞;它仅建议升级。
可测试的核心——扫描逻辑与 I/O/CLI 关注点分离,并由 pytest 覆盖,包括针对真实本地 socket/HTTP 服务器的集成测试。
可扩展——只需在 core/ 中添加一个类并将其接入 VulnScanner.scan() 即可添加新的检查,或者在 data/vuln_signatures.json 中添加新的签名,而无需修改任何代码。
🧪 开发
bash
# 运行测试
pytest -v
# 运行测试并生成覆盖率
pytest --cov=vulnscan --cov-report=term-missing
# 代码检查与格式化
flake8 vulnscan tests
black vulnscan tests
# 类型检查
mypy vulnscan
🗺 路线图
UDP 端口扫描支持
Async (asyncio) 扫描引擎作为线程池的替代方案
用于社区贡献检查的插件系统
CVE/NVD API 查询以补充本地签名数据库
用于沙盒扫描的 Docker 镜像
用于 CI 安全门集成的 SARIF 输出格式
⚠️ 法律与合规使用
此工具仅用于对你拥有或获得明确书面授权进行测试的系统进行安全测试(例如,作为批准的渗透测试、漏洞赏金计划或你自己的基础设施的一部分)。CLI 需要 --i-have-authorization 标志作为一个刻意的阻力点和提醒——传递它表示你拥有该授权,但不能替代授权。
未经授权扫描系统可能违反相关法律,如《计算机欺诈和滥用法》(美国)、《计算机滥用法》(英国)以及其他司法管辖区的同等立法。作者和贡献者对滥用本软件不承担任何责任。有关完整的 MIT 许可证条款,请参阅 LICENSE(按“原样”提供,不提供任何保证)。
📄 许可证
基于 MIT 许可证分发。
标签:CISA项目, Python, Web安全, 安全规则引擎, 密码管理, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 自动化安全评估, 蓝队分析, 逆向工具, 隐私保护