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