brunda6git/smart-port-scanner

GitHub: brunda6git/smart-port-scanner

一个面向网络安全教学的 Web 端 TCP 端口扫描仪表板,提供实时扫描进度、服务检测、风险评分和 PDF 报告导出功能。

Stars: 1 | Forks: 1

# 智能 Port Scanner **一个使用 Python & Flask 构建的专业 TCP 侦察仪表板** ![Python](https://img.shields.io/badge/Python-3.8+-3776AB?style=for-the-badge&logo=python&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-3.0+-000000?style=for-the-badge&logo=flask&logoColor=white) ![JavaScript](https://img.shields.io/badge/JavaScript-ES6+-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black) ![HTML5](https://img.shields.io/badge/HTML5-E34F26?style=for-the-badge&logo=html5&logoColor=white) ![CSS3](https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white) [![在线演示](https://img.shields.io/badge/Live%20Demo-Visit%20Site-00ff88?style=for-the-badge&logo=render&logoColor=black)](https://smart-port-scanner-n2sp.onrender.com)
## 关于 **Smart Port Scanner** 是一个功能齐全的 TCP 端口侦察仪表板,作为大学小型项目构建。直接从浏览器扫描任何 IP 或主机名——获取实时结果、风险评分、地理位置、服务检测以及可下载的 PDF 报告。 旨在展示**网络安全**、**后端 Web 开发**、**并发编程**以及**实时数据流**中的相关概念。 ## 截图 ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/e9/e92324895a90e8447ba7d08a4a711370c5268d52adaf57816f166120cc125604.png) ![扫描进行中](https://static.pigsec.cn/wp-content/uploads/repos/cas/2f/2f59724727f3cbdb2c14d3e81bf8e0390c6e4c6375b7e0fb0d46bd9aa46b33ed.png) ## 功能 | 功能 | 描述 | |--------|-------------| | **完整的仪表板 UI** | 双栏赛博朋克 SOC 风格界面——无需滚动,一目了然 | | **实时终端反馈** | 每个扫描事件发生时带时间戳的实时日志 | | **服务检测** | 识别开放端口上的 70 多种服务(SSH, HTTP, MySQL, Redis, MongoDB...) | | **风险评分** | 为每个开放端口分配风险级别(严重 / 高 / 中 / 低)并附带说明 | | **风险评估卡片** | 动画风险评分(0–100)、进度条、标签摘要以及安全建议 | | **地理位置** | 使用 ip-api.com 显示任何公共 IP 的国家、城市、ISP 和组织 | | **端口详情展开** | 点击任意端口行以查看服务、协议、风险级别、常见用途及缓解建议 | | **扫描配置** | 一键预设:前 20 个、前 100 个、Web 端口、数据库端口、知名端口 | | **图表** | 动画环形图(开放 vs 关闭)和柱状图(风险细分) | | **扫描历史** | 保存最近 50 次扫描,包含目标、日期、开放数量、风险评分和持续时间 | | **PDF 导出** | 下载包含所有端口详情和风险信息的清晰扫描报告 | | **多线程扫描** | 最多 200 个并发线程,实现快速扫描 | | **Server-Sent Events** | 实时流式传输——无需页面刷新,无需轮询 | | **新手引导** | 演示按钮预填 `scanme.nmap.org`,方便即时进行安全测试 | | **动画背景** | 微妙的移动粒子节点和网格——看起来像一个真正的 SOC 工具 | ## 技术栈 **后端** - Python 3.8+ - Flask 3.0 - `socket` — TCP 连接扫描 - `concurrent.futures` — 多线程扫描 - `urllib` — 通过 ip-api.com 获取地理位置 - 基于文件的扫描历史 (JSON) **前端** - 原生 HTML / CSS / JavaScript - Server-Sent Events (SSE) 实现实时流传输 - Chart.js 4.4 — 环形图和柱状图 - Google Fonts — Orbitron + Share Tech Mono + Inter - Canvas API — 动画背景 ## 项目结构 ``` smart-port-scanner/ │ ├── app.py # Flask backend, scanning logic, risk data ├── requirements.txt ├── render.yaml # Render deployment config ├── scan_history.json # Auto-generated scan history ├── .gitignore ├── README.md │ ├── screenshots/ │ ├── home.png │ └── results.png │ ├── templates/ │ └── index.html # Dashboard layout │ └── static/ ├── style.css # Full cyberpunk dashboard styles └── script.js # Scan logic, terminal, charts, history ``` ## 快速开始 ### 前置条件 - Python 3.8+ - pip ### 安装说明 **1. 克隆仓库** ``` git clone https://github.com/brunda6git/smart-port-scanner.git cd smart-port-scanner ``` **2. 安装依赖** ``` pip install -r requirements.txt ``` **3. 运行应用** ``` python app.py ``` **4. 在浏览器中打开** ``` http://localhost:5000 ``` ## 如何使用 1. 在目标字段中输入 **IP 地址**或**主机名** 2. 手动设置端口范围,或点击**快速配置**(前 20 个、Web、数据库等) 3. 或点击 **⚡ 演示** 自动加载 `scanme.nmap.org` —— 一个安全的公共测试目标 4. 点击 **SCAN PORTS** 5. 观看实时终端反馈和实时显示的结果 6. 点击任意端口行以展开完整详情——服务、风险、缓解措施 7. 下载 **PDF 报告**或查看**扫描历史** ## API 参考 ### `POST /scan/stream` 以 Server-Sent Events 形式流式传输扫描结果。 **请求体:** ``` { "target": "scanme.nmap.org", "start_port": 1, "end_port": 1024 } ``` **SSE 事件类型:** | 事件 | Payload | 描述 | |-------|---------|-------------| | `start` | `{ target, resolved_ip, total }` | 扫描已开始 | | `progress` | `{ scanned, total }` | 端口已扫描 | | `open` | `{ port, service, risk_level, explanation }` | 发现开放端口 | | `done` | `{ total_scanned, open_count, duration, risk_score, risk_label, risk_counts, open_ports }` | 扫描完成 | | `error` | `{ message }` | 验证错误 | ### `POST /geolocate` 返回目标 IP 的地理位置数据。 ### `GET /scan-profiles` 返回所有可用的扫描配置及其端口列表。 ### `GET /history` 返回最近 50 次扫描。 ### `DELETE /history/clear` 清除扫描历史。 ## 限制与验证 - 端口必须介于 **1 和 65535** 之间 - 每次扫描最多 **10,000 个端口** - 接受 **IPv4 地址**和**主机名** - 使用 **TCP 连接扫描**——无需 root/管理员权限 - 私有/本地 IP 无法获取地理位置 ## 免责声明 作为信息网络安全的大学小型项目,出于**教育目的**而构建。请仅扫描您拥有**明确权限**进行测试的系统和网络。未经授权的端口扫描在您所在的司法管辖区可能是非法的。 ## 作者 **Brunda Gunaga**
标签:Flask, 插件系统, 数据可视化, 数据统计, 端口扫描, 网络安全, 自定义脚本, 资产测绘, 逆向工具, 隐私保护