用Go net 工具包获取DNS 信息

Golang 内置库net 有一些函数能方便获取DNS 记录信息。

LookupIP

通过域名查询 IPv4 和 IPv6 信息

package main

import (
	"fmt"
	"net"
)

func main() {
	ipRecords, _ := net.LookupIP("google.com")
	for _, ip := range ipRecords {
		fmt.Println(ip)
	}
}

输出:

216.58.197.110
2404:6800:4005:804::200e

LookupCNAME

获取CNAME 信息

package main

import (
	"fmt"
	"net"
)

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

输出:

wap.n.shifen.com.

LookupNS

Name Server (NS)

package main

import (
	"fmt"
	"net"
)

func main() {
	nameServer, _ := net.LookupNS("baidu.com")
	for _, ns := range nameServer {
		fmt.Println(ns)
	}
}

输出:

&{ns4.baidu.com.}
&{ns2.baidu.com.}
&{ns7.baidu.com.}
&{dns.baidu.com.}
&{ns3.baidu.com.}

MX records

package main

import (
	"fmt"
	"net"
)

func main() {
	mxRecords, _ := net.LookupMX("baidu.com")
	for _, mx := range mxRecords {
		fmt.Println(mx.Host, mx.Pref)
	}
}

输出:

mx.maillb.baidu.com. 10
mx.n.shifen.com. 15
mx50.baidu.com. 20
mx1.baidu.com. 20
jpmx.baidu.com. 20

SRV service record

package main

import (
	"fmt"
	"net"
)

func main() {
	cname, srvs, err := net.LookupSRV("xmpp-server", "tcp", "baidu.com")
	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: _xmpp-server._tcp.baidu.com. 

xmpp.wshifen.com.:5269:0:0

TXT records

package main

import (
	"fmt"
	"net"
)

func main() {
	txtRecords, _ := net.LookupTXT("baidu.com")

	for _, txt := range txtRecords {
		fmt.Println(txt)
	}
}

输出:

google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM
v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com a mx ptr -all

利用第三方工具

上面是使用标准库net 得到DNS 信息,如果想要得到更多数据或更方便,可以使用第三方工具,如 https://github.com/miekg/dns 13

Relative Articles
本文网址: https://www.golangnote.com/topic/245.html (转载注明出处)
关于GolangNote:记录在工作中使用golang 遇到、面临的相关问题及解决方法。如果你在这里获得一些知识或信息,解决你的编程问题,请考虑捐赠给不幸的人或者你喜欢的慈善机构,除捐赠外,种植树木、志愿服务或减少排碳的行为也很有益处。