brunda6git/smart-port-scanner
GitHub: brunda6git/smart-port-scanner
一个面向网络安全教学的 Web 端 TCP 端口扫描仪表板,提供实时扫描进度、服务检测、风险评分和 PDF 报告导出功能。
Stars: 1 | Forks: 1
# 智能 Port Scanner
**一个使用 Python & Flask 构建的专业 TCP 侦察仪表板**





[](https://smart-port-scanner-n2sp.onrender.com)
## 关于
**Smart Port Scanner** 是一个功能齐全的 TCP 端口侦察仪表板,作为大学小型项目构建。直接从浏览器扫描任何 IP 或主机名——获取实时结果、风险评分、地理位置、服务检测以及可下载的 PDF 报告。
旨在展示**网络安全**、**后端 Web 开发**、**并发编程**以及**实时数据流**中的相关概念。
## 截图


## 功能
| 功能 | 描述 |
|--------|-------------|
| **完整的仪表板 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, 插件系统, 数据可视化, 数据统计, 端口扫描, 网络安全, 自定义脚本, 资产测绘, 逆向工具, 隐私保护