Variosity/go-concurrent-port-scanner
GitHub: Variosity/go-concurrent-port-scanner
一款基于 Go 并发机制的 TCP 端口扫描 CLI 工具,通过 goroutine 和 channel 模式实现快速、安全输出网络侦察结果。
Stars: 1 | Forks: 0
# Go 并发端口扫描器
一个用于并发扫描目标 IP 地址开放 TCP 端口的 CLI 工具。专为需要快速进行网络侦察的系统管理员、渗透测试人员和安全研究人员设计。
## Flags:
```
-ip Target IP address (default: 127.0.0.1)
-start Starting port (default: 1)
-end Ending port (default: 1024)
```
## 示例:
```go run main.go -ip 192.168.1.1 -start 1 -end 1024```
## 工作原理
顺序扫描速度很慢,因为每次端口检查都要等待前一次检查完成。对于存在被过滤端口的远程主机,顺序扫描 1024 个端口可能需要超过 1000 秒。
该扫描器为每个端口启动一个 goroutine。所有检查同时运行。使用 `sync.WaitGroup` 来跟踪每个 goroutine 何时完成。开放的端口会被发送到一个带缓冲的 channel 中,而不是直接打印——这避免了多个 goroutine 同时写入 stdout 时产生乱码输出的竞态条件。一旦所有 goroutine 完成并且 channel 关闭,一个循环会清空 channel 并干净地打印出结果。
## 我学到了什么
变量捕获 Bug 是第一个障碍——在循环内部启动的 goroutine 闭包捕获的是循环变量本身,而不是它的值。当 goroutine 运行时,该变量已经发生了改变。将 `i` 作为参数传递给匿名函数,可以给每个 goroutine 提供它自己的独立副本。
第二个障碍是认识到 goroutine 不应该直接进行打印操作。并发写入 stdout 会产生交错混乱的输出。channel 模式——在 goroutine 中生产,在一个地方消费——完美解决了这个问题。
解开一切的关键心智模型:goroutine 是工人,channel 是收件箱,WaitGroup 是管理者用来了解所有工人是否完工的手段。
标签:EVTX分析, Go, Ruby工具, 并发编程, 插件系统, 数据统计, 日志审计, 端口扫描, 网络安全, 隐私保护