首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dig命令:是否保证对输出进行排序?

问Dig命令:是否保证对输出进行排序?
EN

Unix & Linux用户
提问于 2014-10-29 19:54:08
回答 1查看 1.5K关注 0票数 3

假设我正在查找I( mail.yahoo.com,gmail.com和mail.google.com )

如果我执行:

代码语言:javascript
复制
dig @8.8.8.8 +nocomments +noquestion \
    +noauthority +noadditional +nostats +nocmd \
    gmail.com mail.yahoo.com mail.google.com

我得到:

代码语言:javascript
复制
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或IP mail.yahoo.com解析为):

这是输出:

代码语言:javascript
复制
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,然后是带有实际IP的A记录(我确实很关心)。

是否有可能使CNAMES或A记录出现故障?类似于:

代码语言:javascript
复制
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记录):

代码语言:javascript
复制
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执行中,如文章顶部所示):

代码语言:javascript
复制
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
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2014-10-30 19:00:23

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

据我所知,如果您使用单个dig调用执行多个查询,就好像您已经按照该顺序分别对每个名称执行了dig。我无法想象为什么代码不会按照命令行上的顺序循环它们。

如果服务器必须遵循CNAME记录才能得到最终答案,则DNS规范表示每个别名都将按照处理的顺序添加到响应中。所以你可以保证你最初的名字是第一名,最后的结果是最后的。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/164872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档