golang – net.Dial() 獲取 whois資料

本文是 net.Dail() 的一個實例。用於獲取域名的whois資料。

已知要獲取域名 python.com.tw 的whois資料,需要訪問 whois.twnic.net.tw 的 43 端口。(通過插件 github.com/zonedb/zonedb 可以獲取whois server信息)

先看程序:

domain := "python.com.tw"

const DefaultReadLimit = 1 << 10 << 10 // 讀取 1M

conn, err := net.Dial("tcp", "whois.cnnic.cn:43") // 建立連結
if err != nil {
	fmt.Println("client dial err =", err)
}

defer conn.Close() // 執行完畢後,關閉連結

// 發送請求內容
if _, err := conn.Write([]byte(domain + "\r\n")); err != nil {
	fmt.Println("client dial write err =", err)
}

// 讀取內容
body, _ := io.ReadAll(io.LimitReader(conn, DefaultReadLimit))
fmt.Println(string(body))

conn, err := net.Dial("tcp", "whois.cnnic.cn:43") 建立和 whois server 之間的連結。

再發送要請求的內容 _, err := conn.Write([]byte(domain + "\r\n"))

最後 創建一個 reader 最大讀取 1M io.LimitReader(conn, DefaultReadLimit),然後再通過 io.ReadAll() 讀取全部內容