golang 高效端口扫描

2020-12-02  本文已影响0人  郭青耀

废话少说,直接上源码,需要注意几点在源码后有说明。

package main

import (
    "fmt"
    "net"
    "os"
    "sync"
    "time"
)

var wg = sync.WaitGroup{}

func main() {
    svcs := []string{"127.0.0.1:8088", "127.0.0.1:8340", "127.0.0.1:8350", "127.0.0.1:8351", "127.0.0.1:8353", "127.0.0.1:8355", "127.0.0.1:8354"}

    //loopMax := len(svcs)
    limitGrouting := 1000
    ch := make(chan struct{}, limitGrouting)
    defer close(ch)

    for _, svc := range svcs {
        go DailUnit(ch, svc)
    }
    wg.Wait()
}

func DailUnit(ch chan struct{}, svc string) {
    defer wg.Done()
    wg.Add(1)
    ch <- struct{}{}
    conn, err := net.DialTimeout("tcp", svc, time.Second)
    if err != nil {
        fmt.Fprintf(os.Stderr, "server %s dail error: %s\n", svc, err.Error())
        <-ch
        return
    }
    fmt.Println(svc + "dail ok")
    conn.Close()
    <-ch
}

上一篇 下一篇

猜你喜欢

热点阅读