zashu04/port-scanner
GitHub: zashu04/port-scanner
一个用Python和Flask构建的Web端口扫描器,用于快速发现网络端口开放情况并评估安全风险。
Stars: 0 | Forks: 0
# 📡 NetScan — 网络端口扫描器
一个专注于网络安全的Web应用程序,执行快速、多线程的TCP端口扫描,具备服务识别、风险评估和简洁的威胁情报仪表板UI。使用 **Python** 和 **Flask** 构建。
## 功能特性
- **多线程TCP扫描** — 使用 `ThreadPoolExecutor`,最多支持200个并发工作线程,实现快速扫描
- **服务识别** — 通过端口号识别60多种知名服务(SSH、RDP、MySQL、Redis、Docker API、Kubernetes等)
- **风险评估** — 为每个开放端口分配风险等级:`信息` / `低` / `中` / `高` / `严重`
- **端口预设**:
- **常用端口**(22个高价值端口)— 数据库、远程访问、Web服务
- **Web端口**(19个端口)— 所有常见HTTP/S和API端口
- **前100个端口**(97个端口)— 最常被扫描的端口
- **自定义** — 任意端口组合或范围(例如 `22,80,443`、`1-1024`、`22,3000-3010`)
- **3种端口状态** — `开放`、`过滤`(超时/防火墙)、`关闭`
- **摘要仪表板** — 主机名、解析的IP、扫描数量、开放/过滤计数、持续时间、最高风险等级
- **过滤视图** — 在全部/仅显示开放/仅显示过滤之间切换
- **扫描历史** — 最近的10次扫描存储在 localStorage 中
- **法律同意门控** — 扫描按钮在用户确认授权前保持锁定
- **可配置超时** — 每个端口0.2秒到3.0秒
## 项目结构
```
port-scanner/
├── app.py # Flask web server & /scan endpoint
├── scanner.py # Multi-threaded port scanning engine
├── requirements.txt # Python dependencies
├── README.md # This file
├── templates/
│ └── index.html # Web interface
└── static/
├── style.css # Dark neon terminal theme
└── script.js # Frontend logic & history
```
## 工作原理
### TCP连接扫描
对于每个端口,使用 `socket.connect_ex()` 进行TCP连接尝试:
| 结果 | 状态 | 含义 |
|--------------------------|------------|------|
| 返回 `0` | **开放** | 连接成功 — 服务正在监听 |
| 返回非零值 | **关闭** | 连接被主动拒绝 |
| 抛出 `socket.timeout` 异常 | **过滤** | 无响应 — 可能被防火墙阻止 |
### 风险等级
| 等级 | 颜色 | 示例 |
|----------|--------|------|
| 信息 | 蓝色 | HTTPS (443)、LDAPS |
| 低 | 绿色 | HTTP (80)、DNS (53) |
| 中 | 琥珀色 | SSH (22)、SMTP (25) |
| 高 | 橙色 | FTP (21)、MySQL (3306)、RDP (3389)、SMB (445) |
| 严重 | 红色 | Telnet (23)、VNC (5900)、Redis (6379)、Docker (2375)、MongoDB (27017) |
### 线程处理
```
with ThreadPoolExecutor(max_workers=200) as executor:
futures = {executor.submit(scan_port, ip, port, timeout): port for port in ports}
for future in as_completed(futures):
results.append(future.result())
```
所有端口并发扫描,受 `max_workers` 限制。一次100个端口的扫描大约在超时时长内完成(而非100倍超时时长)。
## 安装与设置
### 前置条件
- Python 3.8+
- pip
### 步骤
**1. 克隆仓库**
```
git clone https://github.com/yourusername/netscan.git
cd netscan
```
**2. 创建虚拟环境(推荐)**
```
python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
```
**3. 安装依赖**
```
pip install -r requirements.txt
```
**4. 运行应用程序**
```
python app.py
```
**5. 打开浏览器**
```
http://localhost:5002
```
## API 参考
### `POST /scan`
执行端口扫描并返回完整结果。
**请求:**
```
{
"host": "192.168.1.1",
"preset": "common",
"custom_ports": "",
"timeout": 0.5
}
```
**响应:**
```
{
"host": "192.168.1.1",
"ip": "192.168.1.1",
"ports_scanned": 22,
"open_count": 3,
"filtered_count": 1,
"closed_count": 18,
"elapsed": 0.62,
"top_risk": "high",
"results": [
{
"port": 22,
"proto": "tcp",
"status": "open",
"service": "SSH",
"risk": "medium",
"desc": "Secure Shell — brute-force target if exposed"
},
...
]
}
```
### 自定义端口格式
| 输入 | 扫描的端口 |
|-------------------|------------------|
| `22` | 22 |
| `22,80,443` | 22、80、443 |
| `1-1024` | 1 到 1024(最多500个) |
| `22,80,1000-2000` | 22、80、1000–2000 |
## 安全测试目标
您可以针对这些**公开授权**的目标进行测试:
| 目标 | 说明 |
|------------------------|------|
| `127.0.0.1` | 您自己的机器 |
| `scanme.nmap.org` | Nmap的官方扫描测试主机 |
| 您自己的虚拟机/家庭路由器 | 仅当您拥有/管理它时 |
## 使用技术
| 层面 | 技术栈 |
|----------|----------------------------|
| 后端 | Python 3、Flask |
| 扫描器 | `socket`、`concurrent.futures`(标准库) |
| 前端 | HTML5、CSS3、JavaScript (ES6+) |
| 存储 | 浏览器 `localStorage` |
| 字体 | Inter、JetBrains Mono |
## 安全注意事项
- 此工具仅执行**TCP连接扫描** — 不进行SYN/隐形扫描
- 所有扫描在服务器端进行 — Flask服务器建立连接
- 每次扫描最多500个端口,以防滥用
- 超时可配置(0.2秒 – 3.0秒)以平衡速度与准确性
- 扫描结果不会存储在服务器端
## 许可证
MIT 许可证 — 可自由使用、修改和分发,用于授权的安全测试和教育目的。
标签:AES-256, Flask, Python, Qt框架, TCP扫描, 云存储安全, 仪表盘, 多线程扫描, 威胁情报, 密码管理, 开发者工具, 扫描历史, 插件系统, 数据可视化, 数据统计, 无后门, 服务识别, 漏洞评估, 端口扫描, 端口状态, 网络安全, 网络扫描, 自定义端口, 逆向工具, 隐私保护