Dns

使用 dig 查詢地址而不解析 CNAME

  • November 2, 2022

我仔細閱讀了手冊頁,我很確定答案是否定的,但有沒有辦法阻止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這個主機的記錄,所以我應該沒有答案。在這方面,它看起來AAAAA其他任何記錄類型都不同。

我已經嘗試了+norecurseand+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"

引用自:https://unix.stackexchange.com/questions/723287