代码清单2-3完整的端口扫描器
package main
import (
"fmt"
"net"
)
func main() {
for i := 1; i <= 1024; i++ {
address := fmt.Sprintf("172.23.190.244:%d", i)
conn, err := net.Dial("tcp", address)
if err != nil {
continue
}
conn.Close()
fmt.Printf("%d open\n", i)
}
}
代码清单2-7基本的worker池
package main
import (
"fmt"
"sync"
)
func worker(ports chan int, wg *sync.WaitGroup) {
for p := range ports {
fmt.Println(p)
wg.Done()
}
}
func main() {
ports := make(chan int, 100)
var wg sync.WaitGroup
for i := 0; i < cap(ports); i++