发布时间:2024-11-22 00:33:32
import "golang.org/x/net/dns"
var resolver = net.Resolver{}
接下来,我们可以使用resolver.LookupHost()函数来进行域名解析。这个函数接受一个字符串参数,表示要解析的域名。它会返回一个字符串数组,包含了所有解析出来的IP地址。ips, _ := resolver.LookupHost(context.TODO(), "www.example.com")
mxRecords, _ := resolver.LookupMX(context.TODO(), "example.com")
resolver.PreferGo(true)
resolver.Dial = func(ctx context.Context, network, address string) (net.Conn, error) {
c, err := net.DialTimeout(network, address, 5*time.Second)
if err != nil {
return nil, err
}
deadline := time.Now().Add(5 * time.Second)
c.SetDeadline(deadline)
return c, nil
}
此外,DNS库也支持缓存解析结果,以减少对DNS服务器的请求。我们可以通过resolver.Preferences字段来设置缓存的大小。默认情况下,缓存大小为512个记录。resolver.Preferences.MaxTTL = 3600
resolver.Preferences.MinTTL = 60
if err != nil {
if dnsError, ok := err.(*net.DNSError); ok {
// 域名不存在
if dnsError.Err == dns.ErrNoSuchHost {
fmt.Println("域名不存在")
return
}
}
fmt.Println(err)
return
}