sajinbarnaba/port-scanner-web
GitHub: sajinbarnaba/port-scanner-web
一个基于 Python Flask 和原生前端技术构建的 Web 端口扫描应用,通过浏览器界面提供多线程 TCP 连接扫描和 Banner 抓取功能。
Stars: 1 | Forks: 0
# 端口扫描器 — Web 应用
使用 Python (Flask) 后端和轻量级 HTML/CSS/JS 前端构建。
## 功能
- Web UI — 在输入框中输入目标,点击扫描,立即查看结果
- 接受 IP 地址、主机名或完整的 URL (`http://example.com`)
- 灵活的端口输入:范围 (`1-1024`)、列表 (`22,80,443`) 或混合输入
- 可选的 banner grabbing 以识别正在运行的服务
- 后端多线程扫描以提高速度
- 清除按钮可重置并扫描新目标
- 基本的安全限制(每次扫描的最大端口数)以防止意外滥用
## 项目结构
```
port-scanner-web/
├── app.py # Flask routes (/ and /scan)
├── scan_core.py # Scanning logic (reusable, no Flask dependency)
├── templates/
│ └── index.html # Frontend UI
├── static/
│ └── style.css # Styling
├── requirements.txt
└── README.md
```
## 设置(在 VS Code / 终端中)
1. 如果您尚未安装,请**安装 Python 3.7+**。
2. **创建虚拟环境**(推荐,可保持环境整洁):
python3 -m venv venv
source venv/bin/activate # 在 Windows 上:venv\Scripts\activate
3. **安装依赖项** — 此项目只需要一个包,即 Flask:
pip install -r requirements.txt
(或直接使用 `pip install flask`)
4. **运行应用程序**:
python3 app.py
5. **在浏览器中打开**:
http://127.0.0.1:5000
## 如何使用
1. 在输入框中输入 IP、主机名或 URL(例如 `scanme.nmap.org`)
2. (可选)调整端口范围 — 默认为 `1-1024`
3. (可选)勾选“Grab banners”以尝试识别服务
4. 点击 **Scan**
5. 结果显示在下方 — 开放的端口、其服务名称以及 banner(如果已抓取)
6. 点击 **Clear** 以重置表单并扫描不同的目标
## 工作原理
- 前端向 `/scan` 发送一个 `POST` 请求,以 JSON 格式包含目标和选项。
- Flask 后端将主机名解析为 IP,启动一个线程池,并在请求的端口上执行 TCP `connect()` 扫描(与 `nmap -sT` 使用的技术相同)。
- 结果以 JSON 格式返回,并使用 JavaScript 动态渲染到表格中 — 无需重新加载页面。
## 安全限制
为了防止该工具被误用作针对您自己机器的 DoS 工具(或意外扫描过多内容):
- 每次扫描请求最多 **5,000 个端口**
- 服务器端最多使用 **300 个线程**
## ⚠️ 免责声明
此工具仅供**教育目的和授权测试使用**。仅扫描您拥有或获得明确书面测试许可的主机和网络。未经授权的扫描可能会违反相关法律,例如《计算机欺诈和滥用法》(美国)、《计算机滥用法》(英国)、《2000 年信息技术法》(印度)或其他地区的同等立法。
## 未来改进想法
- [ ] 扫描历史 / 先前结果日志
- [ ] 将结果导出为 CSV/JSON 下载
- [ ] 支持 UDP 扫描
- [ ] 长时间扫描期间的进度指示器(通过 WebSockets)
- [ ] 用于轻松部署的 Dockerfile
- [ ] 深色/浅色主题切换
## 许可证
请参阅 [LICENSE](LICENSE)。
标签:Flask, Python, 多模态安全, 插件系统, 数据可视化, 数据统计, 无后门, 服务器安全, 端口扫描, 网络安全, 逆向工具, 隐私保护