radivan15/tcp-port-scanner

GitHub: radivan15/tcp-port-scanner

一个纯 Go 编写的轻量级 TCP 端口扫描 CLI 工具,通过并发 goroutine 池实现对目标主机端口开放状态的快速探测。

Stars: 0 | Forks: 0

# TCP 端口扫描器 一个用于扫描主机 TCP 端口的简单 CLI 工具。使用纯 Go 构建 —— 无外部依赖。 ## 安装说明 请确保已安装 [Go](https://go.dev/dl/) 1.23 或更高版本。 ``` git clone https://github.com/radivan15/tcp-port-scanner.git cd tcp-port-scanner go build -o port-scanner . ``` ## 用法 ### 扫描单个端口 ``` ./port-scanner -host scanme.nmap.org -port 80 ``` ### 扫描端口范围(并发,默认 100 个 worker) ``` ./port-scanner -host scanme.nmap.org -start 1 -end 1024 ``` ### 使用自定义 worker 数量进行扫描 ``` # 更快的扫描 ./port-scanner -host scanme.nmap.org -start 1 -end 1024 -workers 200 # 更节省资源 ./port-scanner -host scanme.nmap.org -start 1 -end 1024 -workers 50 ``` ### 使用自定义超时时间(毫秒)进行扫描 ``` # 300ms timeout — 适用于本地或快速网络 ./port-scanner -host 192.168.1.1 -start 1 -end 1024 -timeout 300 # 2000ms timeout — 适用于慢速或远程网络 ./port-scanner -host scanme.nmap.org -start 1 -end 1024 -timeout 2000 ``` ## 示例输出 ``` Scanning scanme.nmap.org port 1-1024 (workers: 100)... Port 22 OPEN Port 80 OPEN Total: 2 open out of 1024 ports Scan time: 1.043s ``` ## 为什么开发这个工具 作为一名 SRE,我经常使用 `nmap` 等工具进行网络调试和事件响应。我想了解其底层的工作原理 —— 并发扫描究竟是如何运行的,以及 Go 如何使用 goroutine 和 channel 高效处理成千上万的 TCP 连接。 ## 我的收获 - 使用 `net.DialTimeout` 在代码层面了解 TCP 连接的工作原理 - 朴素 goroutine(每个任务一个)与 goroutine 池(固定数量的 worker + channel 队列)之间的区别 - Go channel 如何充当任务队列 —— 类似于分布式系统中的任务队列 - 使用 `sync.WaitGroup` 等待所有 worker 完成 - 超时和并发设置如何影响扫描速度与资源消耗 ## 路线图 - [x] 第一阶段 —— 通过 CLI flag 扫描单个端口 - [ ] 第二阶段 —— 顺序端口范围扫描 - [ ] 第三阶段 —— 使用 goroutine 进行并发扫描(每个端口一个 goroutine) - [ ] 第四阶段 —— 带有 channel 队列 + `-workers` flag 的 goroutine 池 - [ ] 第五阶段 —— 通过 `-timeout` flag 配置单个端口超时时间 - [ ] 第六阶段 —— 带有摘要(开放数量 + 扫描持续时间)的精美表格输出 ### 计划功能 - 扫描主机上的单个端口 - 扫描端口范围(例如 1–1024) - 使用 goroutine 进行并发扫描(速度更快) - 通过 `-workers` flag 控制 worker 数量(goroutine) - 通过 `-timeout` flag 配置单个端口的超时时间(毫秒) - 输出包含开放端口数量和扫描持续时间的精美表格 ## 许可证 MIT 许可证 —— 详见 [LICENSE](LICENSE)
标签:EVTX分析, Go, Ruby工具, TCP, 云存储安全, 并发编程, 插件系统, 数据泄露防护, 日志审计, 网络扫描, 网络探测