crazywifi/RustPortScanner_GUI
GitHub: crazywifi/RustPortScanner_GUI
一款基于 Rust 开发的 nmap 风格端口扫描器,通过内置的 Web 服务器取代传统 GUI,提供了响应式、可实时监控的浏览器可视化操作界面。
Stars: 0 | Forks: 0
# RustPortScanner v2.1
**带有嵌入式生产级 Web GUI 的 nmap 风格端口扫描器**
使用嵌入式 HTTP 服务器取代了 FLTK 原生 GUI (v1.0),该服务器提供了一个响应式的、基于浏览器的专业界面。所有扫描逻辑均被保留——仅更改了 UI 层。
## 更改内容 (v1.0 → v2.1)
| v1.0 中的问题 | v2.1 中的解决方案 |
|---|---|
| 固定 1240×800 窗口,无法调整大小 | 完全响应式的浏览器 UI —— 可自由调整大小 |
| 没有最大化/全屏 | 浏览器全屏 (F11) 原生可用 |
| FLTK 依赖(复杂的原生构建) | 仅需 `tiny_http` —— 最小化依赖 |
| 开放/关闭/过滤端口混在一个扁平列表中 | 开放端口醒目显示;关闭/过滤端口折叠为计数,可按需展开 |
| 数据可读性差 | 每个主机独立卡片及端口表,带有状态徽章(绿色/红色/黄色)和服务名称 |
| 没有实时流 | 通过 chunked HTTP / NDJSON 实时流式传输结果 |
| 没有扫描速率显示 | 顶栏中的实时 ports/sec(端口/秒)计数器 |
| 没有活动日志 | 带有颜色编码条目的时间戳活动日志面板 |
| 没有搜索/排序 | 按状态过滤,自由文本搜索,按端口/主机/服务/状态排序 |
| 没有暂停按钮 | 扫描期间提供暂停(保存状态)+ 停止按钮 |
| 导出功能受限 | 支持从浏览器导出 CSV / JSON / TXT |
## 架构
```
┌─────────────────────────────────────────────────────┐
│ portscanner binary │
│ │
│ ┌──────────────┐ HTTP ┌───────────────────┐ │
│ │ tiny_http │◄───────────│ Browser (any) │ │
│ │ web server │ │ localhost:7681 │ │
│ │ :7681 │────────────► index.html (emb) │ │
│ └──────┬───────┘ NDJSON └───────────────────┘ │
│ │ stream │
│ ┌──────▼───────┐ │
│ │ Scan engine │ TCP Connect / SYN Stealth / UDP │
│ │ thread pool │ (identical to v1.0) │
│ └──────────────┘ │
└─────────────────────────────────────────────────────┘
```
HTML UI (`src/index.html`) 在编译时通过 `include_str!` 嵌入到二进制文件中。运行时无需外部文件。
## 环境要求
| 平台 | 要求 |
|---|---|
| Linux | `libpcap-dev`(用于 SYN/UDP 模式;TCP Connect 无需此依赖) |
| macOS | Xcode Command Line Tools(已包含 libpcap) |
| Windows | [Npcap](https://npcap.com) + SDK(用于 SYN 模式);TCP Connect 无需此依赖 |
所有平台均需要 **Rust stable** (1.70+):https://rustup.rs
## 构建
**Linux:**
```
chmod +x build_linux.sh && ./build_linux.sh
```
**macOS:**
```
chmod +x build_macos.sh && ./build_macos.sh
```
**Windows:**
```
build_windows.bat
```
**手动:**
```
cargo build --release
# Binary: ./target/release/portscanner (Windows 上为 .exe)
```
## 用法
### Web GUI (推荐)
```
./portscanner --gui
# 自动在默认浏览器中打开 http://127.0.0.1:7681
```
### CLI 模式
```
# 单主机
./portscanner 192.168.1.1 -p 1-1024
# CIDR 范围,前 100 个端口,快速
./portscanner 10.0.0.0/24 -F -t 500 -T 200
# SYN 隐蔽扫描 (需要 root 权限)
sudo ./portscanner 192.168.1.1 --syn -p 1-65535
# 保存结果
./portscanner 192.168.1.1 -p top100 -o results
# → results.txt, results.json
# 来自文件列表
./portscanner -iL targets.txt -p 80,443,8080
# 暂停 (Ctrl+C 保存状态),然后恢复
./portscanner 10.0.0.0/24 -p 1-65535
# [Ctrl+C → 写入 scan_state.json]
./portscanner --resume scan_state.json
```
### 所有 CLI 参数
```
-p Port spec: 22,80,443 | 1-1024 | top100 | 1-65535
-F Fast mode (nmap top-100 ports)
-t Thread count (default: 100)
-T Timeout per port in ms (default: 500)
-o Save to .txt + .json
-iL Load targets from file
--syn SYN Stealth scan (needs root)
--udp UDP scan (needs root)
--state State file name (default: scan_state.json)
--resume Resume from saved state
--gui Launch web GUI
--help Show help
```
## Web GUI 功能
- **实时流** —— 端口在扫描时即刻显示
- **按主机分类卡片** —— 每个目标都有独立的卡片及开放端口表
- **状态分离** —— 开放端口立即可见;关闭/过滤端口以计数形式显示,并支持可选展开
- **状态徽章** —— 绿色 OPEN,红色 CLOSED,黄色 FILTERED
- **统计面板** —— 已扫描主机数、开放/关闭/过滤计数实时更新
- **进度条** —— 端口计数、百分比、已用时间、ETA
- **扫描速率** —— 实时 ports/second(端口/秒)计数器
- **活动日志** —— 带有时间戳的条目,按严重程度以颜色区分
- **搜索与过滤** —— 按状态过滤,自由文本搜索(端口/服务/主机),排序选项
- **导出** —— 将结果下载为 CSV、JSON 或 nmap 风格的 TXT
- **原始输出** —— nmap 风格的文本报告,包含 "Not shown: N closed" 摘要
- **CLI 预览** —— 更改设置时,生成的命令会实时更新
- **复制 CLI** —— 一键复制 CLI 命令
- **暂停/恢复** —— 扫描中途暂停会将状态保存到磁盘;通过 UI 或 CLI 恢复
- **重置** —— 一键清除所有字段和结果
## 端口预设
| 预设 | 端口 |
|---|---|
| Common | 21,22,23,25,53,80,110,135,139,143,443,445,3306,3389,5900,8080 |
| Top100 | nmap 最常用的前 100 个端口 |
| Full | 1–65535 |
| Web+DB | 80,443,8080,8443,3306,5432,1433,1521,6379,27017 |
| Dev | 3000,4000,5000,8000,8080,8888,9000,3001,4200,5173 |
| SMB | 135,137,138,139,445,593 |
## 与 nmap 的区别
- TCP Connect 模式执行完整的 3 次握手(与 `nmap -sT` 相同)
- SYN 模式发送原始 SYN 数据包并监听 SYN-ACK(与 `nmap -sS` 相同)
- 服务检测仅为名称识别(无版本探测)
- 无 OS 检测,无脚本引擎
- CIDR 扩展在进程内完成(不对 PTR 记录进行 DNS 查询)
## 许可证
MIT
标签:DNS枚举, DNS查询工具, JSON导出, NDJSON, nmap替代, Rust, tiny_http, Web GUI, 前端交互, 可视化界面, 后端开发, 响应式设计, 实时扫描, 开源安全工具, 插件系统, 数据可视化, 本地服务, 流式传输, 浏览器界面, 端口扫描器, 端口服务识别, 网络安全工具, 网络流量审计, 逆向工程平台