thozoz/GoMap

GitHub: thozoz/GoMap

基于 Go 和 React 构建的轻量级桌面端口扫描与网络发现工具,通过友好的图形界面实现实时扫描结果展示。

Stars: 0 | Forks: 0

# GoMap 一个轻量级的端口扫描器桌面应用,通过 [Wails](https://wails.io) 使用 **Go** 后端和 **React** 前端构建。扫描 TCP 端口,抓取服务 Banner,检测网络中的存活主机,并通过暗色主题 UI 实时显示结果。 本项目作为一个学习项目,旨在探索 Go 的网络原语、goroutine 工作池以及 Wails 桌面应用框架。 ![GoMap 截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/9033d2a717184131.png) ## 下载 Linux 和 Windows 的预编译二进制文件可在 [Releases](../../releases) 页面获取: | 平台 | 文件 | |---|---| | Linux (x64) | `GoMap-linux-amd64` | | Windows (x64) | `GoMap-windows-amd64.exe` | 每次向 `main` 分支推送代码时,都会自动更新一个 **latest** 预发布版本。 ## 功能特性 - **端口范围扫描** — 扫描任意 TCP 端口范围,支持自定义超时时间和 Worker 数量 - **常用端口预设** — 一键扫描约 80 个知名端口(SSH、HTTP、数据库、DevOps 工具等) - **网络发现** — 扫描 CIDR 范围(例如 `192.168.1.0/24`),通过 TCP 探测发现存活主机 - **Banner 抓取** — 读取开放端口的服务 Banner(SSH 版本、HTTP 头等) - **服务检测** — 将端口号映射到已知服务名(超过 100 条记录) - **实时结果** — 端口一经发现即刻显示,无需等待整个扫描完成 - **结果过滤** — 显示所有结果、仅开放端口或仅被过滤(有防火墙)的端口 - **进度跟踪** — 实时进度条、已扫描/总数计数器以及扫描速度(端口/秒) - **取消操作** — 可在扫描中途优雅地停止 ## 技术栈 | 层级 | 技术 | | -------- | -------------------------------------------------------------------------- | | 后端 | [Go](https://go.dev) — `net` 包、goroutine 工作池、context 取消机制 | | 前端 | [React](https://react.dev) + [Tailwind CSS](https://tailwindcss.com) | | 桌面 | [Wails v2](https://wails.io) — 将应用封装在原生 webview 窗口中 | ## 项目结构 ``` GoMap/ ├── app.go # Core logic — StartScan, StartScanList, ScanNetwork, CancelScan ├── main.go # Wails app entry point ├── wails.json # Wails project config ├── go.mod ├── go.sum └── frontend/ ├── src/ │ ├── App.jsx # Main React UI — scan form, results table, event listeners │ └── main.jsx ├── index.html ├── package.json ├── tailwind.config.js └── vite.config.js ``` ## 快速开始 ### 前置条件 - [Go](https://go.dev/dl/) 1.21+ - [Node.js](https://nodejs.org/) 18+ - [Wails CLI](https://wails.io/docs/gettingstarted/installation) — `go install github.com/wailsapp/wails/v2/cmd/wails@latest` - 在 Linux 上:`webkit2gtk` — 例如在 Fedora 上执行 `sudo dnf install webkit2gtk4.1-devel` 验证你的设置: ``` wails doctor ``` ### 开发 ``` wails dev ``` 在支持热重载的窗口中打开应用。Go 代码的更改会重启后端;React 代码的更改会即时热重载。 ### 构建 ``` wails build ``` 在 `build/bin/` 目录下生成单个原生二进制文件。 ### 针对现代 Linux 用户的注意事项 现代 Linux 发行版(Fedora 40+、Ubuntu 24.04+、Debian 13+ 等)已弃用 `webkit2gtk-4.0` 包,转而使用 `webkit2gtk-4.1`。如果在尝试运行应用时遇到 **`libwebkit Not Found`** 错误,你需要: 1. 为你的发行版安装 **4.1** 开发包。例如: # Fedora sudo dnf install webkit2gtk4.1-devel # Ubuntu / Debian sudo apt install libwebkit2gtk-4.1-dev 2. 使用 `webkit2_41` 构建标签运行项目: wails dev -tags webkit2_41 对于生产构建,请使用相同的标签: wails build -tags webkit2_41 ## 工作原理 1. **端口扫描** 通过 TCP 使用 `net.DialTimeout` 进行。对每个端口尝试完整的连接——如果成功则端口状态为 `OPEN`,如果超时则为 `FILTERED`(可能被防火墙拦截),如果被拒绝则为 `CLOSED`(默认情况下会静默跳过)。 2. **工作池** — 可配置数量的 goroutine 从 channel 中并发拉取端口,使大规模扫描比顺序扫描快得多。 3. **取消机制** — 每次扫描都在 `context.WithCancel` 下运行。`CancelScan` 方法触发取消函数(由互斥锁保护以避免数据竞争),所有 Worker 通过其循环顶部的 `select` 检查干净地退出。 4. **实时 UI** — Go 在确定端口状态后立即发出 `port_result` Wails 事件。React 前端缓冲传入的事件,并每 300 毫秒将它们刷新到状态中,以避免过度重绘。 5. **Banner 抓取** — 在确认端口开放后,对连接设置 500 毫秒的读取截止时间。接收到的任何字节都会作为单独的 `port_banner` 事件发出,并注入到匹配的表格行中。 6. **网络发现** — `ScanNetwork` 使用 `net.ParseCIDR` 解析 CIDR,遍历所有主机地址,并在端口 `22, 80, 443, 8080, 3389, 8443` 上探测每一个地址。首次成功的连接即将该主机标记为存活。 ## 许可证 本项目基于 [MIT License](LICENSE) 授权。
标签:Banner抓取, CIDR扫描, Go, Goroutine, Maven构建, React, Ruby工具, Syscalls, Tailwind CSS, TCP扫描, URL发现, URL短链接分析, Wails, 二进制发布, 内网扫描, 安全检测, 实时显示, 并发扫描, 开源工具, 恶意行为检测, 批量查询, 插件系统, 数据统计, 日志审计, 服务器安全, 服务探测, 桌面应用, 端口扫描, 网络发现, 网络安全, 网络工具, 自定义脚本, 资产探测, 轻量级工具, 隐私保护