DNS记录是映射文件,这些文件与DNS服务器关联,无论每个域与哪个IP地址相关联,它们处理发送到每个域的请求。net包包含各种方法来查找DNS记录的一般详细信息。让我们运行一些示例来收集有关DNS服务器和目标域的相应记录的信息:

 

A和AAAA

net.LookupIP()函数接受一个字符串(域名)并返回包含主机的IPv4和IPv6地址的IP对象。

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	iprecords, _ := net.LookupIP("facebook.com")
	for _, ip := range iprecords {
		fmt.Println(ip)
	}
}

上述程序的输出列出了以IPv4和IPv6格式返回的facebook.com的A记录。

2a03:2880:f12f:83:face:b00c:0:25de
31.13.79.35

 

规范名称

这是规范名称的缩写。CNAME本质上是用于绑定流量的域和子域文本别名。net.LookupCNAME() 函数接受主机名(m.facebook.com)作为字符串,并为给定主机返回单个规范域名。

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	cname, _ := net.LookupCNAME("m.facebook.com")
	fmt.Println(cname)
}

为m.facebook.com域返回的CNAME记录如下所示:

star-mini.c10r.facebook.com.

 

PTR(指针)

这些记录提供从地址到名称的反向绑定。PTR记录应与前向映射完全匹配。net.LookupAddr() 函数对地址执行反向查找,并返回映射到给定地址的名称列表。

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	ptr, _ := net.LookupAddr("6.8.8.8")
	for _, ptrvalue := range ptr {
		fmt.Println(ptrvalue)
	}
}

对于给定的地址,上述程序返回单个反向记录,如下所示:

tms_server.yuma.army.mil

 

名称服务器 (NS)

NS记录描述区域的授权名称服务器。NS还将子域委派给区域文件的其他组织。net.LookupNS() 函数将域名 (facebook.com) 作为字符串,并将DNS-NS记录作为NS结构的一部分返回。

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	nameserver, _ := net.LookupNS("facebook.com")
	for _, ns := range nameserver {
		fmt.Println(ns)
	}
}
&{a.ns.facebook.com.} &{b.ns.facebook.com.}

 

MX记录

这些记录标识可以交换电子邮件的服务器。net.LookupMX() 函数将域名作为字符串,并返回按首选项排序的MX结构切片。MX结构由作为字符串的Host和作为uint16的Pref组成。

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	mxrecords, _ := net.LookupMX("facebook.com")
	for _, mx := range mxrecords {
		fmt.Println(mx.Host, mx.Pref)
	}
}

域 (facebook.com) 的输出列表MX记录,后跟Pref。

msgin.vvv.facebook.com. 10

 

SRV服务记录

查找SRV函数尝试解析给定服务、协议和域名的SRV查询。第二个参数是"tcp"或"udp"。返回的记录按优先级排序,并在优先级内按权重随机化。

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	cname, srvs, err := net.LookupSRV("xmpp-server", "tcp", "golang.org")
	if err != nil {
		panic(err)
	}
 
	fmt.Printf("\ncname: %s \n\n", cname)
 
	for _, srv := range srvs {
		fmt.Printf("%v:%v:%d:%d\n", srv.Target, srv.Port, srv.Priority, srv.Weight)
	}
}

下面的输出演示了CNAME返回,后跟SRV记录目标、端口、优先级和权重,以冒号分隔。

cname: _xmpp-server._tcp.golang.org.

 

TXT记录

此文本记录存储有关SPF的信息,这些信息可以标识代表组织发送电子邮件的授权服务器。net.LookupTXT() 函数将域名 (facebook.com) 作为字符串,并以字符串切片的形式返回DNS TXT记录列表。

package main
 
import (
	"fmt"
	"net"
)
 
func main() {
	txtrecords, _ := net.LookupTXT("facebook.com")
 
	for _, txt := range txtrecords {
		fmt.Println(txt)
	}
}

gmail.com的单个TXT记录如下所示:

v=spf1 redirect=_spf.facebook.com