Dig 指令:輸出是否保證排序?

Dig 指令:輸出是否保證排序?

假設我正在嘗試尋找 IP mail.yahoo.comgmail.com並且mail.google.com

如果我執行:

dig @8.8.8.8 +nocomments +noquestion \
    +noauthority +noadditional +nostats +nocmd \
    gmail.com mail.yahoo.com mail.google.com

我得到:

gmail.com.                       299    IN  A       173.194.123.21
gmail.com.                       299    IN  A       173.194.123.22
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169
mail.google.com.                   0    IN  CNAME   googlemail.l.google.com.
googlemail.l.google.com.         243    IN  A       173.194.123.21
googlemail.l.google.com.         243    IN  A       173.194.123.22

我能否確保如果我看到一筆CNAME記錄,A與其對應的記錄不會出現在CNAME另一台機器對應的記錄或A其他主機名稱的記錄之前?

例如,讓我專注mail.yahoo.com(我只希望 IP 或多個 IPmail.yahoo.com解析為):

這是輸出:

mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169

我要找的主機名稱 ( mail.yahoo.com) 是第一個條目的第一列。然後有一堆CNAMES我真的不關心的,然後是A帶有實際IP的記錄(我確實關心)。

是否有可能使CNAMES記錄A發生故障?就像是:

ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net. #(!)BAD
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net. #(!)BAD
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169

A或更糟糕(頂部的實際記錄):

any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.

或更糟中的更糟(在多解析度dig執行中,如帖子頂部所示):

ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169
mail.google.com.                   0    IN  CNAME   googlemail.l.google.com.  # This one I want
gmail.com.                       299    IN  A       173.194.123.21            # This one I want
gmail.com.                       299    IN  A       173.194.123.22            # This one I want
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.          # This one I want
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
googlemail.l.google.com.         243    IN  A       173.194.123.21
googlemail.l.google.com.         243    IN  A       173.194.123.22

先感謝您。

答案1

否 - 傳回結果的順序取決於 DNS 伺服器,您無法控制它,因此我不會依賴特定 DNS 伺服器的順序。

我確實相信並且到目前為止我的測試已經證實了這一點,在您的情況下,實際查詢是按順序完成的,首先是google.com,最後是mail.google.com - 這是因為dig 會按照您的順序執行查詢在命令列上指定。

由於命令列語法的設定方式,順序很重要。這就是我的回答。如果它沒有按照指定的順序處理它們,任何非全域修飾符都會搞砸。

從手冊頁:

dig 的 BIND 9 實作支援在命令列上指定多個查詢(除了支援 -f 批次檔選項之外)。每個查詢都可以提供自己的一組標誌、選項和查詢選項。

在這種情況下,每個查詢參數代表上述命令列語法中的單一查詢。每個都包含任何標準選項和標誌、要尋找的名稱、可選查詢類型和類別以及應套用於該查詢的任何查詢選項。

相關內容