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 的记录(我确实关心)。

是否有可能使CNAMESA记录乱序?例如:

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 批处理文件选项之外)。每个查询都可以使用自己的一组标志、选项和查询选项。

在这种情况下,每个查询参数都代表上述命令行语法中的一个单独查询。每个查询参数都由任何标准选项和标志、要查找的名称、可选查询类型和类以及应应用于该查询的任何查询选项组成。

相关内容