Dns
使用 dig 查詢地址而不解析 CNAME
我仔細閱讀了手冊頁,我很確定答案是否定的,但有沒有辦法阻止
dig
解析CNAME
主機的記錄?例如:
$ dig +short mail.yahoo.com A edge.gycpi.b.yahoodns.net. 66.218.84.40 66.218.84.44 66.218.84.41 66.218.84.45 66.218.84.42 66.218.84.43
沒有
A
這個主機的記錄,所以我應該沒有答案。在這方面,它看起來A
和AAAA
其他任何記錄類型都不同。我已經嘗試了
+norecurse
and+noadditional
選項但沒有成功。我可以輕鬆地解析腳本中的響應以查看它是否有多行,其中第一行是 FQDN,但感覺我不應該這樣做。
根據RFC 1034,您可以要求
CNAME
記錄類型,如果存在,您將得到。dig -t cname +short www.bbc.co.uk www.bbc.co.uk.pri.bbc.co.uk.
但是,似乎沒有辦法要求(比如說)
A
記錄,但不允許通過 a 進行查找CNAME
:dig -t cname +short uk.www.bbc.co.uk.pri.bbc.co.uk # No output
事實上,RFC 1034 的第 3.6.2 節寫道,
當名稱伺服器未能在與域名關聯的資源集中找到所需的 RR 時,它會檢查資源集是否包含
CNAME
具有匹配類的記錄。如果是,則名稱伺服器CNAME
在響應中包含該記錄,並在記錄的數據欄位中指定的域名處重新開始查詢CNAME
。此規則的一個例外CNAME
是不重新啟動與類型匹配的查詢。根據 RFC 術語,因為在此描述中沒有“應該”,所以這是一個明確的行動方案。
要獲得您正在尋找的行為,您可能需要包裝
dig
一些自定義程式碼,例如,query=www.bbc.co.uk result=$(dig -t cname +short "$query" | xargs) [ -z "$result" ] && result=$(dig -t a +short "$query" | xargs) printf "Result: %s\n" "$result"