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

dig不会对结果重新排序,它按照名称服务器返回结果的顺序显示它们。名称服务器通常会在每次查询特定记录时对结果进行洗牌(随机或循环)(以实现简单形式的负载平衡),尽管可能有服务器配置选项覆盖此设置。对于BIND,相关选项是rrset-ordersortlist

据我所知,如果您通过一次调用执行多个查询dig,就好像您dig按顺序为每个名称单独执行了一样。我无法想象为什么代码不按照它们在命令行上的顺序循环遍历它们。

如果服务器必须遵循CNAME记录才能得到最终答案,则DNS规范表示每个别名将按照处理顺序添加到响应中。因此,您可以保证您输入的原始名称将排在第一位,而最终结果将排在最后。

相关内容