Giorgioferri/Port-Scanner

GitHub: Giorgioferri/Port-Scanner

一个基于 Go goroutine 的并发 TCP 端口扫描器,可快速检测目标主机开放端口并识别常见服务。

Stars: 0 | Forks: 0

# 端口扫描器 一个使用 Go 编写的快速、并发 TCP 端口扫描器。它检查目标主机上哪些端口是开放的,利用 goroutine 并行执行每一个端口检查,并识别最常见端口背后的服务。 本项目作为学习项目构建,旨在练习 Go 基础知识:`flag` 包、`net` 包、指针、map 以及使用 goroutine 和 `sync.WaitGroup` 的并发编程。 ## 功能 - **并发扫描** — 每个端口都在其独立的 goroutine 中进行检查,因此可以在几秒钟内完成整个范围的扫描,而不是几分钟。 - **自定义端口范围** — 通过 `-start` 和 `-end` 精确选择要扫描的端口。 - **全量扫描** — `-all` 扫描从 1 到 65535 的所有端口。 - **服务检测** — 通过内置的端口映射表识别常见服务(HTTP、SSH、HTTPS、FTP、DNS、MySQL 等)。 ## 环境要求 - [Go](https://go.dev/dl/) 1.18 或更高版本。 ## 安装说明 克隆仓库并构建可执行文件: ``` git clone https://github.com/Giorgioferri/port-scanner.git cd port-scanner go build port_scanner.go ``` 这将生成一个独立的二进制文件(Linux/macOS 上为 `port_scanner`,Windows 上为 `port_scanner.exe`),无需安装 Go 即可运行。 ## 用法 | 参数 | 类型 | 默认值 | 描述 | |-----------|---------|-------------|--------------------------------------| | `-host` | string | `localhost` | 要扫描的目标主机 | | `-start` | int | `1` | 范围的起始端口 | | `-end` | int | `1` | 范围的结束端口 | | `-all` | bool | `false` | 扫描所有端口 (1–65535) | ### 示例 扫描主机的知名端口: ``` ./port_scanner -host scanme.nmap.org -start 1 -end 1024 ``` 扫描单个特定端口: ``` ./port_scanner -host scanme.nmap.org -start 80 -end 80 ``` 扫描所有端口: ``` ./port_scanner -host scanme.nmap.org -all ``` 你也可以在不构建的情况下直接运行它: ``` go run port_scanner.go -host scanme.nmap.org -start 1 -end 1024 ``` ### 示例输出 ``` porta 22 aperta con il servizio SSH porta 80 aperta con il servizio HTTP finito ``` 由于扫描是并发运行的,开放的端口可能会以任何顺序出现 —— 取决于哪个端口先响应。 ## 工作原理 对于范围内的每个端口,扫描器都会启动一个 goroutine,尝试使用 `net.DialTimeout` 建立 TCP 连接。连接成功意味着端口是开放的;连接失败(或超时)意味着端口是关闭或被过滤的。`sync.WaitGroup` 会维持程序的运行,直到每个 goroutine 都执行完毕。随后,开放的端口会在 `map[int]string` 中进行查找,以附加易于阅读的服务名称。 ## 路线图 - [ ] 限制并发(使用 channel 的 worker pool),以实现可靠的全范围扫描,同时避免触及操作系统的 socket 限制 - [ ] Banner 抓取以读取服务版本(例如 `OpenSSH 8.2`) - [ ] 将结果保存到文件 - [ ] 更大的服务映射表,可选择从官方 [IANA registry](https://www.iana.org/assignments/service-names-port-numbers) 加载 ## 免责声明 此工具**仅**用于扫描您拥有或获得明确测试权限的系统。未经授权的端口扫描在您所在的管辖区可能是违法的。`scanme.nmap.org` 由 Nmap 项目专门提供,作为测试扫描器的合法目标。 ## 许可证 在 MIT 许可证下发布。
标签:EVTX分析, Go, Ruby工具, 并发, 插件系统, 数据统计, 日志审计, 端口扫描, 网络工具