許多與網路相關的操作依賴 DNS 查找將主機名稱解析為 IP 位址和其他資訊。 Golang 在 net 套件中提供了一組方便的函數來執行 DNS 查找,包括 LookupAddr 和 LookupTXT,它們傳回給定主機名稱的對應 IP 位址或文字記錄。
這些函數的一個限制是它們通常依賴 /etc/resolv.conf 中配置的系統解析器。雖然這在大多數情況下已經足夠了,但在某些情況下,您可能需要指定特定的 DNS 伺服器來執行查找。
不幸的是,標準 Go 函式庫目前不提供 LookupAddrWithServer 或 LookupTXTWithServer 等允許您指定自訂 DNS 伺服器的函數。但是,有幾個第三方函式庫提供了此功能,包括流行的 github.com/miekg/dns。
以下來自@holys 給出的答案的修改示例演示瞭如何使用miekg/ dns 庫與指定伺服器執行DNS 查找:
package main import ( "fmt" "log" "github.com/miekg/dns" ) func main() { target := "example.com" server := "8.8.8.8" c := dns.Client{} m := dns.Msg{} m.SetQuestion(target, dns.TypeA) r, t, err := c.Exchange(&m, server+":53") if err != nil { log.Fatal(err) } fmt.Printf("Took %v", t) if len(r.Answer) == 0 { log.Fatal("No results") } for _, ans := range r.Answer { arecord := ans.(*dns.A) fmt.Printf("%s", arecord.A) } }
此示例使用github.com/miekg/ dns 庫執行A 記錄使用位於8.8.8.8 的指定DNS 伺服器來尋找example.com。透過利用 miekg/dns 等第三方函式庫,您可以擴展 Go 標準函式庫提供的功能來滿足您的特定需求。
以上是如何使用自訂 DNS 伺服器在 Go 中執行 DNS 查找?的詳細內容。更多資訊請關注PHP中文網其他相關文章!