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扫描, 云存储安全, 仪表盘, 多线程扫描, 威胁情报, 密码管理, 开发者工具, 扫描历史, 插件系统, 数据可视化, 数据统计, 无后门, 服务识别, 漏洞评估, 端口扫描, 端口状态, 网络安全, 网络扫描, 自定义端口, 逆向工具, 隐私保护