一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - golang解析域名的步驟全紀(jì)錄

golang解析域名的步驟全紀(jì)錄

2020-05-22 09:26伊布 Golang

這篇文章主要給大家介紹了利用golang如何解析域名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近遇到了一個(gè)問題。

我們的kube-apiserver配置了OIDC認(rèn)證,OIDC issuer是添加了dns server記錄的,但由于某些原因,我需要覆蓋掉dns server的解析,改用hostAlias的IP地址,但是實(shí)測(cè)發(fā)現(xiàn)總是走了DNS解析,雖然/etc/hosts文件已經(jīng)添加了自定義的hosts記錄。而那些沒有在dns server注冊(cè)的域名,還是可以通過 /etc/hosts 解析的。

原因是,kube-apiserver的基礎(chǔ)鏡像是 busybox ,和 centos 不同,這貨沒有 /etc/nsswitch.conf 文件,所以總是優(yōu)先使用DNS解析,忽略了 /etc/hosts 文件。

解決辦法很簡(jiǎn)單,給鏡像添加 /etc/nsswitch.conf 文件指定解析順序即可,內(nèi)容如下。

?
1
hosts: files dns

即,files優(yōu)先dns。

順帶完整的理一下linux系統(tǒng)里golang的域名解析。

golang有兩種域名解析方法:內(nèi)置Go解析器;基于cgo的系統(tǒng)解析器。通過環(huán)境變量GODEBUG來配置。

?
1
2
export GODEBUG=netdns=go # force pure Go resolver
export GODEBUG=netdns=cgo # force cgo resolver

默認(rèn)采用的是內(nèi)置Go解析器,因?yàn)楫?dāng)DNS解析阻塞時(shí),內(nèi)置Go解析器只是阻塞了一個(gè)goroutine,而cgo的解析器則是阻塞了一個(gè)操作系統(tǒng)級(jí)別的線程。

?
1
func init() { netGo = true }

讀取 resolv.conf 失敗則強(qiáng)制使用cgo。

?
1
2
3
4
5
6
7
8
9
confVal.resolv = dnsReadConfig("/etc/resolv.conf")
if confVal.resolv.err != nil && !os.IsNotExist(confVal.resolv.err) &&
    !os.IsPermission(confVal.resolv.err) {
    // If we can't read the resolv.conf file, assume it
    // had something important in it and defer to cgo.
    // libc's resolver might then fail too, but at least
    // it wasn't our fault.
    confVal.forceCgoLookupHost = true
}

當(dāng)使用內(nèi)置Go解析器時(shí),根據(jù)解析優(yōu)先級(jí)的不同,還會(huì)細(xì)分為下面四種。

?
1
2
3
4
5
6
7
8
const (
    // hostLookupCgo means defer to cgo.
    hostLookupCgo hostLookupOrder = iota
    hostLookupFilesDNS   // files first
    hostLookupDNSFiles   // dns first
    hostLookupFiles   // only files
    hostLookupDNS   // only DNS
)

當(dāng) /etc/nsswitch.conf 文件不存在或者文件存在但是沒有指定 hosts 字段時(shí),linux下使用的是 hostLookupDNSFiles ,也就是說,dns解析優(yōu)先hosts解析,所以就會(huì)出現(xiàn)開頭出現(xiàn)的問題。

?
1
2
3
4
5
6
7
8
9
10
11
12
   nss := c.nss
   srcs := nss.sources["hosts"]
   // If /etc/nsswitch.conf doesn't exist or doesn't specify any
   // sources for "hosts", assume Go's DNS will work fine.
   if os.IsNotExist(nss.err) || (nss.err == nil && len(srcs) == 0) {
       if c.goos == "linux" {
           // glibc says the default is "dns [!UNAVAIL=return] files"
           // http://www.gnu.org/software/libc/manual/html_node/Notes-on-NSS-Configuration-File.html.
           return hostLookupDNSFiles
       }
       return hostLookupFilesDNS
}

通過 nsswitch.conf 可以指定解析順序。代碼挺簡(jiǎn)單的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var mdnsSource, filesSource, dnsSource bool
var first string
for _, src := range srcs {
    if src.source == "files" || src.source == "dns" {
        if !src.standardCriteria() {
            return fallbackOrder // non-standard; let libc deal with it.
        }
        if src.source == "files" {
            filesSource = true
        } else if src.source == "dns" {
            dnsSource = true
        }
        if first == "" {
            first = src.source
        }
        continue
    }
    // Some source we don't know how to deal with.
    return fallbackOrder
}
 
// Cases where Go can handle it without cgo and C thread
// overhead.
switch {
case filesSource && dnsSource:
    if first == "files" {
        return hostLookupFilesDNS
    } else {
        return hostLookupDNSFiles
    }
case filesSource:
    return hostLookupFiles
case dnsSource:
    return hostLookupDNS
}

所以指定 hosts: files dns,解析策略就是 hostLookupFilesDNS,即優(yōu)先使用 /etc/hosts 。

詳細(xì)的解析順序請(qǐng)參見 hostLookupOrder

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)服務(wù)器之家的支持。

原文鏈接:https://ieevee.com/tech/2018/12/16/go-name-resolution.html

延伸 · 閱讀

精彩推薦
  • GolangGolang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說起,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看...

    Go語言中文網(wǎng)11352020-05-21
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
主站蜘蛛池模板: 四虎4hu新地址入口 四虎1515h永久 | 9丨精品国产高清自在线看 9久热这里只有精品免费 | 极品丝袜小说全集 | 国产精品资源在线观看网站 | 亚洲 日韩 国产 中文视频 | 亚洲国产天堂 | 久久亚洲精品专区蓝色区 | 69短视频| 欧美高清milf在线播放 | 亚洲国产在线99视频 | 关晓彤被调教出奶水的视频 | 日本在线看 | 久久精品黄AA片一区二区三区 | 99自拍视频在线观看 | 亚洲视频在线观看地址 | 欧美一区二区三区免费高 | 五月天网站 | 日本在线视频免费看 | 亚洲国产精品日韩高清秒播 | 2018久久精品热在线观看 | 91sao国产在线观看 | 男人边吃奶边做好爽视频免费 | 九九九九九九 | 欧美a一片xxxx片与善交 | lilisha李丽莎喷水大胆在线 | 男人的j放进女人的p全黄 | 久久精视频 | 色老女人 | 欧美一级激情 | 欧美四级无删版影片 | 韩国三级日本三级香港三级黄 | 草综合| 白丝爆动漫羞羞动漫网站 | 特黄特级高清免费视频毛片 | 精品无码久久久久久久久 | 亚洲+欧美+国产+综合 | videosxxxx老女人| 纲手被强喷水羞羞漫画 | 吃大胸寡妇的奶 | caoporm国产精品视频免费 | ipx-177绝对领域在线观看 |