GoLand编写 TCP 端口扫描器的详细过程(golang接口测试框架)快来看

随心笔谈9个月前发布 admin
215 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了一段使用Go语言编写的程序,用于测试TCP连接的开闭情况。程序的主要功能包括: 1. **程序结构**: - 通过通道`ports`接收端口列表,并通过`results`通道接收连接状态。 - 使用`worker`函数启动多个 goroutine,逐个尝试连接到指定端口。 2. **连接测试流程**: - 程序先创建多个通道启动测试连接,并通过结果通道收集连接成功或失败的信息。 - 最后对收集到的结果进行排序,并输出未连接的关闭端口和成功连接的开放端口。 3. **核心逻辑**: - 程序通过简单的TCP连接测试,展示了使用Go语言处理多个连接的效率和安全性。 - 程序在连接失败时记录关闭端口,在成功连接时记录开放端口,最后输出结果。 总结而言,这篇文章通过一个简洁的程序展示了Go语言在TCP连接测试中的应用。

package main
import (
“fmt”
“net”
“sort”
)
func worker(ports chan int, results chan int) {
for p :=range ports {
address :=fmt.Sprintf(“20.194.168.28:%d”, p)
conn, err :=net.Dial(“tcp”, address)
if err !=nil {
results <- 0
continue
}
conn.Close()
results <- p
}
}
func main() {
ports :=make(chan int, 100)
results :=make(chan int)
var openports []int
var closeports []int
for i :=0; i < cap(ports); i++ {
go worker(ports, results)
}
go func() {
for i :=1; i < 1024; i++ {
ports <- i
}
}()
for i :=1; i < 1024; i++ {
port :=<-results
if port !=0 {
openports=append(openports, port)
} else {
closeports=append(closeports, port)
}
}
close(ports)
close(results)
sort.Ints(openports)
sort.Ints(closeports)
for _, port :=range closeports {
fmt.Printf(“%d closed\n”, port)
}
for _, port :=range openports {
fmt.Printf(“%d opened\n”, port)
}
}
// func main() {
// start :=time.Now()
// var wg sync.WaitGroup
// for i :=21; i < 120; i++ {
// wg.Add(1)
// go func(j int) {
// defer wg.Done()
// address :=fmt.Sprintf(“20.194.168.28:%d”, j)
// conn, err :=net.Dial(“tcp”, address)
// if err !=nil {
// fmt.Printf(“%s 关闭了\n”, address)
// return
// }
// conn.Close()
// fmt.Printf(“%s 打开了!!!\n”, address)
// }(i)
// }
// wg.Wait()
// elapsed :=time.Since(start) / 1e9
// fmt.Printf(“\n\n%d seconds”, elapsed)
// }
// func main() {
// for i :=21; i < 120; i++ {
// address :=fmt.Sprintf(“20.194.168.28:%d”, i)
// conn, err :=net.Dial(“tcp”, address)
// if err !=nil {
// fmt.Printf(“%s failed 关闭了\n”, address)
// continue
// }
// conn.Close()
// fmt.Printf(“%s connected 打开了!!!\n”, address)
// }
// }

© 版权声明

相关文章