suraj718549-cmyk/AegisScan-Vulnerability-Scanner

GitHub: suraj718549-cmyk/AegisScan-Vulnerability-Scanner

AegisScan 是一款基于 Python 纯标准库构建的多线程端口扫描与安全审计工具,提供赛博朋克风格 GUI 和自动化 HTML 报告生成。

Stars: 0 | Forks: 0

# 🛡️ AegisScan // 多线程网络安全漏洞扫描器 [![Python 版本](https://img.shields.io/badge/Python-3.7+-green.svg?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/) [![许可证](https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge)](https://opensource.org/licenses/MIT) [![构建](https://img.shields.io/badge/Security-Safe%20Audit-cyan.svg?style=for-the-badge)](https://en.wikipedia.org/wiki/Vulnerability_scanner) AegisScan 是一款具有教育意义、达到作品集级别的漏洞扫描工具,完全使用 Python 从零开始构建。它具有令人惊艳的科幻“赛博朋克黑客”暗色主题 Tkinter GUI,高性能的多线程 socket 引擎,主动的 banner grabbing 以及本地漏洞评估功能。 非常适合希望在作品集中展示 socket 编程、UI 并发和自动化安全审计的学生、网络安全初学者和工程师。 ## 🚀 核心功能 * **⚡ 多线程 TCP 端口扫描**:利用线程安全的 Queue 架构并发扫描多达 150 个端口,且不会导致图形界面锁定或冻结。 * **📡 动画 Canvas 雷达小部件**:具有复古的圆形雷达画布,配备动态扫描线、刻度标记以及青色的目标指示器,当发现活动端口时,这些指示器会实时闪烁。 * **🕵️ 主动 banner grabbing**:连接到开放端口并读取问候响应,以识别服务类型、daemon 版本以及正在运行的软件。 * **🔍 针对性安全审计**: * **FTP 匿名登录检查器**:主动测试暴露的 FTP 服务器(端口 21)是否存在不安全的匿名用户登录。 * **HTTP 标头安全审计器**:从活动的 Web daemon 请求标头,并检查是否缺失现代安全防护 (`X-Frame-Options`, `Content-Security-Policy`, `Strict-Transport-Security`, `X-Content-Type-Options`, `Referrer-Policy`)。 * **SSL/TLS 验证**:验证端口 443 上的证书,捕获过期或自签名的证书。 * **📊 高级交互式报告**: * **HTML 仪表板**:构建响应式暗色仪表板,展示严重性摘要统计、自定义 CSS 威胁指标、交互式 Accordion 风险列表以及直接的浏览器原生打印为 PDF 样式。 * **TXT 摘要文件**:编译干净、结构化的日志,包含自定义的 ASCII 艺术表格。 * **🔌 零依赖**:仅使用标准 Python 库。安全、便携,在 Windows、macOS 和 Linux 上开箱即用,瞬间运行! ## 📂 项目结构 ``` Vulnerability-Scanner/ │ ├── aegis_scan/ │ ├── __init__.py # Package initializer │ ├── database.py # Port service references & CVE signature database │ ├── scanner.py # Core multithreaded socket audit logic │ ├── report.py # Report compilers (Stunning HTML Dashboard & TXT) │ └── gui.py # Futuristic Tkinter GUI (Radar canvas, queues) │ ├── main.py # Project entry script (Dual CLI & GUI support) ├── requirements.txt # Zero-dependency package configuration notice └── README.md # Exceptional, internship-ready documentation ``` ## 🛠️ 入门指南与运行说明 由于 **AegisScan** **没有外部依赖项**,您只需要安装标准的 Python 即可! ### 前置条件 确保已安装 Python 3.7+。Windows 系统会自动包含 `tkinter`。 *(如果您运行的是最小化的 Linux 环境,可以通过以下命令添加:`sudo apt-get install python3-tk`)* ### 1. 标准图形界面执行(推荐) 只需启动程序而无需任何参数即可开启炫酷的赛博朋克仪表板: ``` python main.py ``` ### 2. 高性能 CLI 执行 为了方便进行快速脚本编写,可直接在您的 shell 中运行审计: ``` # 针对 localhost 的基础扫描 python main.py localhost # 在 CLI 模式下使用 80 个线程的自定义端口列表 python main.py scanme.nmap.org -c -p 21,22,80,443 -t 80 # 审计扩展端口范围 python main.py 127.0.0.1 -c -p 1-1000 ``` #### 命令行参数: ``` positional arguments: target Target hostname or IP address to audit (e.g. 'localhost' or 'scanme.nmap.org'). options: -h, --help show this help message and exit -p PORTS, --ports PORTS Ports to probe. Choices: - 'common' : Audits standard service ports (default) - '1-1000' : Range notation - '22,80,443,3306' : Comma separated custom list -t THREADS, --threads THREADS Size of worker thread pool (5 to 150, default 40). -c, --cli Enforce direct Command-Line Mode (prevents starting Tkinter GUI). ``` ## 💡 深入技术工程详解 ### 1. 异步多线程 在 Tkinter 中,主线程运行着一个持续的事件循环 (`root.mainloop()`) 来绘制元素并监听用户的点击。如果您在主线程上运行一个顺序执行的 socket 扫描器,整个窗口将冻结并且无响应,直到所有端口扫描完毕。 **AegisScan 通过以下方式解决并发难题:** 1. 在专用的 daemon 后台线程上生成扫描器。 2. 生成一个端口号队列 (`queue.Queue`)。 3. 生成多达 150 个 worker 线程,这些线程并发地从队列中获取端口,执行连接尝试,并报告结果。 4. 使用 Tkinter 线程安全的轮询循环 `.after()`,每 50 毫秒从辅助线程获取日志和进度指标,更新控制台、雷达和树状表格,实现 0fps 延迟! ### 2. TCP 端口扫描与 Sockets 扫描引擎使用标准的 TCP socket 执行非侵入式的 TCP 三次握手: ``` import socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(timeout_value) result = s.connect_ex((ip_address, port_number)) if result == 0: # Port is open! ``` * `AF_INET` 定义了 IPv4 地址族。 * `SOCK_STREAM` 指定了面向连接的 TCP 协议。 * `connect_ex` 直接返回状态码(`0` 表示连接成功,其他值表示 socket 超时或关闭状态),而不是抛出异常,这使得扫描器极其快速和健壮。 ### 3. 主动 Banner Grabbing 与审计 当一个开放端口被标记时,扫描器会读取问候字符串。对于 Web 协议 (80/443),它会发送一个标准的 HTTP 探测来获取 Web 服务器的标头(例如:`Server: Apache/2.4.41`): ``` import urllib.request req = urllib.request.Request(url, method="HEAD") with urllib.request.urlopen(req, timeout=timeout) as response: headers = response.info() server_banner = headers.get("Server") ``` 发现的 banner 将通过本地数据库模块 (`aegis_scan/database.py`) 进行比对,检查签名模式(如 `vsftpd 2.3.4` 或 EOL 的 Web 服务器),以安全地演示基于版本的漏洞匹配。 ## 🛡️ 安全审计与法律免责声明 **重要提示**:AegisScan 仅执行安全、非侵入性的审计。它: * **绝对不会** 执行暴力的字典攻击。 * **绝对不会** 执行真实的 exploit payload。 * **绝对不会** 使用拒绝服务数据包淹没目标。 端口扫描可能被视为侵入性行为。仅扫描您拥有的网络和目标(如 `localhost` 或 `127.0.0.1`)或专为审计设计的测试主机(如 Nmap 社区提供的 `scanme.nmap.org`)。未经授权扫描网络可能会违反当地的计算机防御法案或服务条款协议。请负责任地使用此工具! *创建为一个高保真的教育性代码库,旨在展示 Python 网络编程、图形界面工程以及网络安全审计。*
标签:Banner抓取, Python, 加密, 图形界面, 插件系统, 数据统计, 无后门, 漏洞扫描器, 端口扫描, 逆向工具