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工具, 并发, 插件系统, 数据统计, 日志审计, 端口扫描, 网络工具