golang 获取域名 ip dns 信息

1 Go语言查找DNS A记录

A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录. 用户可以将该域名下的网站服务器指向到自己的web server上. 同时也可以设置您域名的二级域名.

使用 Go 语言的标准库 net.LookupIP() 接受域名的字符串参数,返回 net.IP的切片. 这个 net.IP 对象包含IPv4地址和IPv6地址.

package main


import (

    "fmt"

    "net"

)


func main() {

    iprecords, _ := net.LookupIP("mojotv.cn")

    for _, ip := range iprecords {

        fmt.Println(ip)

    }

}

上面代码返回的facebook域名的IPv4和IPv6地址:

C:\golang\mojotv.cn>go run golang_dns_example.go

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

31.13.79.35
2 Go语言查找DNS CNAME记录

CNAME(缩写canonical name)记录,即:别名记录.这种记录允许您将多个名字映射到同一台计算机. 通常用于同时提供WWW和MAIL服务的计算机.例如,有一台计算机名为"host.mydomain.com"(A记录). 它同时提供WWW和MAIL服务,为了便于用户访问服务.可以为该计算机设置两个别名(CNAME):WWW和MAIL.

使用Go语言标准库net.LookupCNAME()根据域名字符串查询DNS CNAME 记录值.

package main


import (

    "fmt"

    "net"

)


func main() {

    cname, _ := net.LookupCNAME("m.facebook.com")

    fmt.Println(cname)
    
}

返回m.facebook.com 的 DNS CNAME 记录值出输结果如下:

C:\golang\mojotv.cn>go run dns_cname_example.go

star-mini.c10r.facebook.com.
3 Go语言查找DNS PTR记录

PTR记录,是电子邮件系统中的邮件交换记录的一种;另一种邮件交换记录是A记录(在IPv4协议中)或AAAA记录(在IPv6协议中).PTR记录常被用于反向地址解析. 根据一个IP值,查找映射的域名值,不一定没有ip地址都回生效,DNS的IP地址可以查到.

DNS PTR用途

  • PTR记录被用于电子邮件发送过程中的反向地址解析.
  • 当正向域名解析完成后,还应当向您的线路接入商(ISP)申请做反向地址解析,以减少被国外机构退信的可能性.

使用Go语言标准库net.LookupAddr()函数对地址执行反向查找,并返回映射到给定地址的名称列表.

package main


import (

    "fmt"

    "net"

)


func main() {

    ptr, err := net.LookupAddr("114.114.114.114")

    if err != nil {

        fmt.Println(err)

    }

    for _, ptrvalue := range ptr {

        fmt.Println(ptrvalue)

    }

}

查找dns的返回值如下

C:\golang\dns>go run example3.go

public1.114dns.com.
4 Go语言查找DNS NS记录

NS记录此记录指定负责此DNS区域的权威名称服务器. A记录和NS记录的区别是,A记录直接给出目的IP, NS记录将DNS解析任务交给特定的服务器, NS记录中记录的IP即为该特定服务器的IP地址.

使用Go语言标准库net.LookupNS()函数对域名执行反向查找,并返回负责此域名DNS-NS记录切片.

package main


import (

    "fmt"

    "net"

)


func main() {

    nameserver, _ := net.LookupNS("baidu.com")

    for _, ns := range nameserver {

        fmt.Println(ns)

    }

}

结果如下

C:\golang\mojotv.cn>go run dsn_ns_example.go

&{ns3.baidu.com.}

&{ns4.baidu.com.}

&{ns7.baidu.com.}

&{dns.baidu.com.}

&{ns2.baidu.com.}
5 Go语言查找DNS MX记录

邮件交换记录 (MX record)是域名系统(DNS)中的一种资源记录类型,用于指定负责处理发往收件人域名的邮件服务器. MX记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件的服务器.简单邮件传输协议(SMTP)会根据MX记录的值来决定邮件的路由过程.

使用Go语言标准库 net.LookupMX 函数将域名作为字符串,并返回按首选项排序的MX 结构体的切片. MX结构由主机作为string组成,Pref是uint16.

package main


import (

    "fmt"

    "net"

)


func main() {

    mxrecords, _ := net.LookupMX("baidu.com")

    for _, mx := range mxrecords {

        fmt.Println(mx.Host, mx.Pref)
    
    }

}

域名(baidu.com)的输出列表MX记录

C:\golang\mojotv.cn>go run golang_dns_mx_example.go

mx.maillb.baidu.com. 10

mx.n.shifen.com. 15

mx1.baidu.com. 20

jpmx.baidu.com. 20

mx50.baidu.com. 20
​​​​​​6 Go语言查找DNS SRV记录

SRV记录(英語:Service Record,中文又名服务定位记录)是域名系统中用于指定服务器提供服务的位置(如主机名和端口)数据.此数据于RFC 2782中定义,类型代码为33. 部分协议,如会话发起协议(SIP)及可扩展消息与存在协议(XMPP)通常需要服务记录的支持.

Go语言标准库LookupSRV函数尝试指定服务的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记录目标,端口,优先级和由冒号分隔的权重.

C:\golang\mojotv.cn>go run golang_dns_srv_example.go

cname: _xmpp-server._tcp.golang.org.
​​​​7 Go语言查找DNS TXT记录

TXT记录用来保存域名的附加文本信息,TXT记录的内容按照一定的格式编写,最常用的是SPF格式,SPF用于登记某个域名拥有的用来外发邮件的所有ip地址. MX记录的作用是给寄信者指明某个域名的邮件服务器有哪些,SPF格式的TXT记录的作用跟MX记录相反,它向收信者表明,哪些邮件服务器是经过某个域名认可发送邮件的. SPF的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件.按照SPF格式在DNS中增加一条TXT类型的记录,将提高该域名的信誉度,同时可以防止垃圾邮件伪造该域的发件人发送垃圾邮件.

Go语言标准库 net.LookupTXT 函数将域名(baidu.com)作为字符串,并返回DNS TXT记录列表作为字符串片段.

package main


import (

    "fmt"

    "net"

)


func main() {

    txtrecords, _ := net.LookupTXT("baidu.com")


    for _, txt := range txtrecords {

        fmt.Println(txt)

    }

}

baidu.com的txt值如下

C:\golang\mojotv>go run golang_dns_txt.go

v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com a mx ptr -all

google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM
相关推荐
怪我冷i21 分钟前
使用vscode调试wails项目(golang桌面GUI)
vscode·golang
月空MoonSky23 分钟前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa23 分钟前
【MySQL 06】表的增删查改
数据库·mysql
向上的车轮1 小时前
Django学习笔记二:数据库操作详解
数据库·django
编程老船长1 小时前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
全栈师2 小时前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 3172 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
BergerLee3 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
gorgor在码农3 小时前
Mysql 索引底层数据结构和算法
数据结构·数据库·mysql
5967851543 小时前
DotNetty ChannelRead接收数据为null
tcp/ip·c#