golang 實現埠掃描
阿新 • • 發佈:2020-12-31
對埠進行掃描基於連線,在go
中我們可以使用net.Dial
進行判斷,如果返回的結果沒有錯誤,那麼這個埠就應該是開啟的,如果返回了錯誤,那麼可以說明這個埠是關閉的,程式碼如下
func ScanPort(protocol string, hostname string, port int) bool {
fmt.Printf("scanning port %d \n", port)
p := strconv.Itoa(port)
addr := net.JoinHostPort(hostname, p)
conn, err := net.DialTimeout(protocol, addr, 3*time.Second)
if err != nil {
return false
}
defer conn.Close()
return true
}
掌握瞭如何對一個特定的埠進行判斷,那麼對所有的埠(埠號一共可能有1<<16
個)進行遍歷,然後一一進行判斷,便可以找到所有的開放埠,但是如果是順序進行掃描,效率並不是很高,可以使用多協程,見程式碼 GitHub