golang如何獲取域名ip?dns信息
Go語(yǔ)言查找DNS A記錄
A (Address) 記錄是用來(lái)指定主機(jī)名(或域名)對(duì)應(yīng)的IP地址記錄. 用戶可以將該域名下的網(wǎng)站服務(wù)器指向到自己的web server上. 同時(shí)也可以設(shè)置您域名的二級(jí)域名.
使用 Go 語(yǔ)言的標(biāo)準(zhǔn)庫(kù) net.LookupIP()
接受域名的字符串參數(shù),返回 net.IP
的切片. 這個(gè) net.IP
對(duì)象包含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
Go語(yǔ)言查找DNSCNAME記錄
CNAME(縮寫canonical name)記錄,即:別名記錄.這種記錄允許您將多個(gè)名字映射到同一臺(tái)計(jì)算機(jī). 通常用于同時(shí)提供WWW和MAIL服務(wù)的計(jì)算機(jī).例如,有一臺(tái)計(jì)算機(jī)名為“host.mydomain.com”(A記錄). 它同時(shí)提供WWW和MAIL服務(wù),為了便于用戶訪問(wèn)服務(wù).可以為該計(jì)算機(jī)設(shè)置兩個(gè)別名(CNAME):WWW和MAIL.
使用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)net.LookupCNAME()
根據(jù)域名字符串查詢DNS CNAME 記錄值.
package main import ( "fmt" "net" ) func main() { cname, _ := net.LookupCNAME("m.facebook.com") fmt.Println(cname) }
返回m.facebook.com 的 DNS CNAME 記錄值出輸結(jié)果如下:
C:\golang\mojotv.cn>go run dns_cname_example.go star-mini.c10r.facebook.com.
Go語(yǔ)言查找DNS PTR記錄
PTR記錄,是電子郵件系統(tǒng)中的郵件交換記錄的一種;另一種郵件交換記錄是A記錄(在IPv4協(xié)議中)或AAAA記錄(在IPv6協(xié)議中).PTR記錄常被用于反向地址解析. 根據(jù)一個(gè)IP值,查找映射的域名值,不一定沒(méi)有ip地址都回生效,DNS的IP地址可以查到.
DNS PTR用途
- PTR記錄被用于電子郵件發(fā)送過(guò)程中的反向地址解析.
- 當(dāng)正向域名解析完成后,還應(yīng)當(dāng)向您的線路接入商(ISP)申請(qǐng)做反向地址解析,以減少被國(guó)外機(jī)構(gòu)退信的可能性.
使用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)net.LookupAddr()
函數(shù)對(duì)地址執(zhí)行反向查找,并返回映射到給定地址的名稱列表.
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.
Go語(yǔ)言查找DNS NS記錄
NS記錄此記錄指定負(fù)責(zé)此DNS區(qū)域的權(quán)威名稱服務(wù)器. A記錄和NS記錄的區(qū)別是,A記錄直接給出目的IP, NS記錄將DNS解析任務(wù)交給特定的服務(wù)器, NS記錄中記錄的IP即為該特定服務(wù)器的IP地址.
使用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)net.LookupNS()
函數(shù)對(duì)域名執(zhí)行反向查找,并返回負(fù)責(zé)此域名DNS-NS記錄切片.
package main import ( "fmt" "net" ) func main() { nameserver, _ := net.LookupNS("baidu.com") for _, ns := range nameserver { fmt.Println(ns) } }
結(jié)果如下
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.}
Go語(yǔ)言查找DNS MX記錄
郵件交換記錄 (MX record)是域名系統(tǒng)(DNS)中的一種資源記錄類型,用于指定負(fù)責(zé)處理發(fā)往收件人域名的郵件服務(wù)器. MX記錄允許設(shè)置一個(gè)優(yōu)先級(jí),當(dāng)多個(gè)郵件服務(wù)器可用時(shí),會(huì)根據(jù)該值決定投遞郵件的服務(wù)器.簡(jiǎn)單郵件傳輸協(xié)議(SMTP)會(huì)根據(jù)MX記錄的值來(lái)決定郵件的路由過(guò)程.
使用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù) net.LookupMX
函數(shù)將域名作為字符串,并返回按首選項(xiàng)排序的MX 結(jié)構(gòu)體的切片. MX結(jié)構(gòu)由主機(jī)作為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
Go語(yǔ)言查找DNS SRV記錄
SRV記錄(英語(yǔ):Service Record,中文又名服務(wù)定位記錄)是域名系統(tǒng)中用于指定服務(wù)器提供服務(wù)的位置(如主機(jī)名和端口)數(shù)據(jù).此數(shù)據(jù)于RFC 2782中定義,類型代碼為33. 部分協(xié)議,如會(huì)話發(fā)起協(xié)議(SIP)及可擴(kuò)展消息與存在協(xié)議(XMPP)通常需要服務(wù)記錄的支持.
Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)LookupSRV
函數(shù)嘗試指定服務(wù)的SRV查詢,協(xié)議和域名的SRV查詢. 第二個(gè)參數(shù)是“tcp”或“udp”. 返回的記錄按優(yōu)先級(jí)排序,并按優(yōu)先級(jí)在權(quán)重隨機(jī)分配.
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記錄目標(biāo),端口,優(yōu)先級(jí)和由冒號(hào)分隔的權(quán)重.
C:\golang\mojotv.cn>go run golang_dns_srv_example.go cname: _xmpp-server._tcp.golang.org.
Go語(yǔ)言查找DNS TXT記錄
TXT記錄用來(lái)保存域名的附加文本信息,TXT記錄的內(nèi)容按照一定的格式編寫,最常用的是SPF格式,SPF用于登記某個(gè)域名擁有的用來(lái)外發(fā)郵件的所有ip地址. MX記錄的作用是給寄信者指明某個(gè)域名的郵件服務(wù)器有哪些,SPF格式的TXT記錄的作用跟MX記錄相反,它向收信者表明,哪些郵件服務(wù)器是經(jīng)過(guò)某個(gè)域名認(rèn)可發(fā)送郵件的. SPF的作用主要是反垃圾郵件,主要針對(duì)那些發(fā)信人偽造域名的垃圾郵件.按照SPF格式在DNS中增加一條TXT類型的記錄,將提高該域名的信譽(yù)度,同時(shí)可以防止垃圾郵件偽造該域的發(fā)件人發(fā)送垃圾郵件.
Go語(yǔ)言標(biāo)準(zhǔn)庫(kù) net.LookupTXT
函數(shù)將域名(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
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go語(yǔ)言的http/2服務(wù)器功能及客戶端使用
Golang 有一個(gè)很棒的自帶 http 服務(wù)器軟件包,不用說(shuō)就是: net/http, 它非常簡(jiǎn)單,但是功能非常強(qiáng)大。下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言的http/2服務(wù)器功能及客戶端使用的相關(guān)資料,需要的朋友可以參考下2018-09-09Go?Web實(shí)戰(zhàn)之創(chuàng)建項(xiàng)目及增加日志功能
這篇文章主要為大家詳細(xì)介紹了Go?Web項(xiàng)目中如何實(shí)現(xiàn)創(chuàng)建項(xiàng)目及增加日志功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11詳解Golang如何優(yōu)雅判斷interface是否為nil
這篇文章主要為大家詳細(xì)介紹了Golang如何優(yōu)雅判斷interface是否為nil的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下2024-01-01深入淺出Go語(yǔ)言:手把手教你高效生成與解析JSON數(shù)據(jù)
本文將帶你一步步走進(jìn)Go語(yǔ)言的世界,教你如何高效生成與解析JSON數(shù)據(jù),無(wú)論你是初學(xué)者還是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,都能在本文中找到實(shí)用的技巧和靈感,本文內(nèi)容簡(jiǎn)潔明了,示例豐富,讓你在閱讀的過(guò)程中輕松掌握Go語(yǔ)言生成與解析JSON數(shù)據(jù)的技巧,需要的朋友可以參考下2024-02-02golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)
本文主要介紹了golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Golang TCP網(wǎng)絡(luò)編程的具體實(shí)現(xiàn)
go語(yǔ)言是一門功能強(qiáng)大的編程語(yǔ)言,它提供了眾多的網(wǎng)絡(luò)編程庫(kù),其中包括tcp/ip,本文主要介紹了Golang TCP網(wǎng)絡(luò)編程的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以來(lái)了解一下2024-06-06go語(yǔ)言搬磚之go jmespath實(shí)現(xiàn)查詢json數(shù)據(jù)
這篇文章主要為大家介紹了go語(yǔ)言搬磚之go jmespath實(shí)現(xiàn)查詢json數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06golang協(xié)程設(shè)計(jì)及調(diào)度原理
這篇文章主要介紹了golang協(xié)程設(shè)計(jì)及調(diào)度原理,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06