github.com/giovannyortegon/go@v0.0.0-20220115155912-8890063f5bdd/src/BlackHatGo/Chap02/tcp-sync-scanner/tcp-scanner-final.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net" 6 "sort" 7 ) 8 9 func worker(ports chan int, results chan int) { 10 for p := range ports { 11 address := fmt.Sprintf("scanme.nmap.org:%d", p) 12 conn, err := net.Dial("tcp", address) 13 if err != nil { 14 results <- 0 15 continue 16 } 17 conn.Close() 18 results <- p 19 } 20 } 21 22 func main() { 23 ports := make(chan int, 100) 24 results := make(chan int) 25 var openports [] int 26 27 for i := 0; i < cap(ports); i++ { 28 go worker(ports, results) 29 } 30 31 go func() { 32 for i := 1; i <= 1024; i++ { 33 ports <- i 34 } 35 }() 36 37 for i := 0; i <= 1024; i++ { 38 port := <- results 39 if port != 0 { 40 openports = append(openports, port) 41 } 42 } 43 44 close(ports) 45 close(results) 46 sort.Ints(openports) 47 48 for _, port := range openports { 49 fmt.Printf("%d open\n", port) 50 } 51 }