Assem-Elmasri/Port-Scanner
GitHub: Assem-Elmasri/Port-Scanner
一个零依赖的 Go 语言并发 TCP 端口扫描器,支持主机名解析和进度条显示,适合快速发现目标开放端口。
Stars: 0 | Forks: 1
# 🔍 端口扫描器
一个用 Go 构建的快速、并发 TCP 端口扫描器。支持单端口检查、带有实时进度条的范围扫描以及自动主机名解析。
## 功能特性
- **并发扫描** — 使用 goroutines 同时扫描数千个端口
- **主机名支持** — 接受 IP 地址和主机名(通过 DNS 自动解析)
- **进度条** — 范围扫描期间的视觉进度指示器
- **结果排序** — 开放端口以整洁的排序表格显示
- **可配置超时** — 调整每个端口的超时时间,以实现快速或彻底的扫描
- **零依赖** — 完全使用 Go 标准库构建
## 安装
```
git clone https://github.com/Assem-Elmasri/Port-Scanner.git
cd Port-Scanner
go build -o portscanner main.go
```
## 使用方法
```
# 扫描端口范围
./portscanner -target scanme.nmap.org -start 1 -end 1000
# 扫描单个端口
./portscanner -target 192.168.1.1 -start 80
# 使用自定义 timeout 扫描 (默认: 1s)
./portscanner -target 10.0.0.1 -start 1 -end 65535 -timeout 2
```
### 参数标志
| 标志 | 默认值 | 必需 | 描述 |
| ---------- | ------- | -------- | ------------------------------------ |
| `-target` | — | ✅ | 目标 IP 地址或主机名 |
| `-start` | `1` | — | 起始端口(或要扫描的单个端口) |
| `-end` | `0` | — | 结束端口(单端口扫描时省略) |
| `-timeout` | `1` | — | 每个端口的超时时间(秒) |
## 输出示例
### 范围扫描
```
Resolved scanme.nmap.org -> 45.33.32.156
Scanning 45.33.32.156:1-100
Found 2 open port(s):
PORT STATUS
────────────────────
22 open
80 open
Scan completed in 100 ports
```
### 单端口扫描
```
Scanning 127.0.0.1:80
✓ Port 80 is open
```
## 工作原理
1. **目标解析** — 如果提供了主机名,则通过 `net.LookupHost` 将其解析为 IP
2. **并发扫描** — 每个端口都在自己的 goroutine 中使用带有可配置超时的 `net.Dialer` 进行扫描
3. **线程安全收集** — 使用受互斥锁保护的 slice 收集开放端口
4. **进度追踪** — 原子计数器在 stderr 上驱动实时进度条
5. **清晰输出** — 所有扫描完成后,结果经过排序并以格式化表格显示
## 技术栈
- **语言**: Go
- **并发**: `sync.WaitGroup`, `sync.Mutex`, `sync/atomic`
- **网络**: `net.Dialer` (TCP 连接扫描)
- **CLI**: `flag` (标准库)
标签:CLI, DNS解析, EVTX分析, Golang, Go语言, TCP扫描, WiFi技术, 二进制发布, 安全编程, 密码管理, 并发扫描, 开发运维, 开源工具, 开源项目, 批量查询, 插件系统, 数据统计, 日志审计, 程序破解, 端口扫描, 网络安全, 网络枚举, 资产探测, 隐私保护