正文

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

文章摘要

这篇文章介绍了一段使用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) // } // }