在Golang中如何獲取DNS記錄

2021-10-12 06:27:06 字數 1116 閱讀 5999

使用golang獲取網域名稱的dns記錄, 包括a / cname等型別.

方案1: 官方net包

只舉例獲取cname型別的解析記錄, 其他型別大同小異.

func cname(src string) (dst string, err error)

官方net包呼叫的是系統api, 所以在不同的系統上可能有不同的結果, 我測試當乙個網域名稱的解析記錄如下時, linux和windows返回的結果不一致.

bysir.xyz. 297 in cname blog.bysir.top.

blog.bysir.top. 60 in cname bysir.top.

bysir.top. 60 in a 78.178.25.149

windows下net.lookupcname會返回第一層cname, 即blog.bysir.top., linux下會返回第二層cname, 即bysir.top…

而如果你想獲取完整的解析記錄, 或者是精確的第一層cname就需要用到下述的第二種方案了.

方案2: github.com/miekg/dns包

// cname2 返回所有層的cname

// src: 網域名稱

// dnsservice: dns伺服器, 如114.114.114.114

func cname2(src string, dnsservice string) (dst string, err error)

var lasterr error

// retry 3 times

for i := 0; i < 3; i++

// 最終都會指向乙個ip 也就是typea, 這樣就可以返回所有層的cname.

m.setquestion(src+".", dns.typea)

r, _, err := c.exchange(&m, dnsservice+":53")

if err != nil

dst = string{}

for _, ans := range r.answer

}lasterr = nil

break

}err = lasterr

return

在Golang中獲取DNS記錄

使用golang獲取網域名稱的dns記錄,包括a cname等型別.只舉例獲取cname型別的解析記錄,其他型別大同小異.func cname src string dst string,err error 官方net包呼叫的是系統api,所以在不同的系統上可能有不同的結果,我測試當乙個網域名稱的解...

在Golang中獲取DNS記錄

使用golang獲取網域名稱的dns記錄,包括a cname等型別.只舉例獲取cname型別的解析記錄,其他型別大同小異.func cname src string dst string,err error 官方net包呼叫的是系統api,所以在不同的系統上可能有不同的結果,我測試當乙個網域名稱的解...

在Golang中獲取DNS記錄

使用golang獲取網域名稱的dns記錄,包括a cname等型別.只舉例獲取cname型別的解析記錄,其他型別大同小異.func cname src string dst string,err error 官方net包呼叫的是系統api,所以在不同的系統上可能有不同的結果,我測試當乙個網域名稱的解...