登录
首页 >  Golang >  Go教程

Golang端口扫描工具实现与使用教程

时间:2025-12-31 19:54:57 439浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《Golang实现端口扫描工具及使用方法》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

Go端口扫描工具核心是net.DialTimeout并发探测,通过goroutine+channel控制并发数,支持端口列表、范围、常用端口及CIDR批量扫描,并需设置合理超时、错误处理和命令行参数。

如何使用Golang实现端口扫描工具_检测目标主机端口状态

用 Go 语言写一个轻量、高效的端口扫描工具并不难,核心在于利用 net.DialTimeout 快速探测 TCP 连接是否可达,同时通过并发控制避免阻塞和过度消耗资源。

基础 TCP 端口探测逻辑

最直接的方式是尝试与目标 IP:Port 建立 TCP 连接。如果连接成功(返回 nil error),说明端口开放;超时或拒绝连接则通常表示关闭或被过滤。

示例关键代码:

conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", ip, port), 2*time.Second)
if err == nil {
    conn.Close()
    fmt.Printf("Port %d is open\n", port)
} else if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
    fmt.Printf("Port %d timeout\n", port)
} else {
    fmt.Printf("Port %d closed or filtered\n", port)
}

支持并发扫描提升效率

单个端口逐个扫描太慢,应使用 goroutine + channel 协同工作,限制并发数防止系统资源耗尽或触发防火墙限流。

  • 用带缓冲的 channel 控制最大并发数(如 100 个 goroutine 同时运行)
  • 将待扫描端口放入任务 channel,每个 goroutine 从其中取任务执行
  • 结果通过另一个 channel 收集,主 goroutine 统一输出

支持常见扫描模式

可根据需求灵活切换扫描范围和行为:

  • 指定端口列表:如 [22, 80, 443, 8080]
  • 端口范围扫描:如 1–1000 或 1–65535
  • 常用端口快速扫描:内置 top 100 或 top 1000 端口(参考 nmap 的 nmap-services
  • 支持 CIDR 批量主机:如 192.168.1.0/24,用 net.ParseCIDR 解析并遍历 IP

简单健壮性增强建议

生产级使用需注意几个细节:

  • 设置合理的超时时间(1–3 秒较平衡,过短漏报,过长拖慢整体)
  • 捕获并忽略常见临时错误(如 too many open files),可调高 ulimit 或降低并发
  • 对 ICMP 不可达等网络层错误做区分,避免误判为端口关闭
  • 加简单命令行参数支持(flag 包),例如:-host 127.0.0.1 -p 22,80,443 -range 1-1000 -t 2
不复杂但容易忽略

本篇关于《Golang端口扫描工具实现与使用教程》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>