1 package tcpScanner
2
3 import (
4 "fmt"
5 "net"
6 "sort"
7 )
8
9 /*
10 多通道通信
11 */
12
13 func workerL(ports, results chan int) {
14 for p := range ports {
15 addr := fmt.Sprintf("124.223.113.130:%d", p)
16 conn, err := net.Dial("tcp", addr)
17 if err != nil {
18 results <- 0
19 continue
20 }
21 conn.Close()
22 results <- p
23 }
24 }
25
26 func Demo5() {
27 ports := make(chan int, 100)
28 results := make(chan int)
29
30 var openports []int
31
32 for i := 0; i < cap(ports); i++ {
33 go workerL(ports, results)
34 }
35 go func() {
36 for i := 0; i < 65535; i++ {
37 ports <- i
38 }
39 }()
40 for i := 0; i < 65535; i++ {
41 port := <-results
42 if port != 0 {
43 openports = append(openports, port)
44 }
45 }
46 close(ports)
47 close(results)
48 sort.Ints(openports)
49
50 for _, port := range openports {
51 fmt.Printf("%d open\n", port)
52 }
53 }
1 package main
2
3 import "tcpScanner/tcpScanner"
4
5 func main() {
6 tcpScanner.Demo5()
7 }