1. 程式人生 > 其它 >golang 實現埠掃描

golang 實現埠掃描

技術標籤:Go# 網路程式設計

對埠進行掃描基於連線,在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