在Golang中獲取DNS記錄

2021-10-16 09:27:06 字數 1168 閱讀 3752

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

只舉例獲取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就需要用到下述的第二種方案了.

// 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,所以在不同的系統上可能有不同的結果,我測試當乙個網域名稱的解...