许多与网络相关的操作依赖 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中文网其他相关文章!