获取负责某些主机的DNS服务器列表的正确方法是什么?

时间:2011-04-29 06:18:52

标签: dns cname

我使用以下步骤:

  1. 查询主机的记录,有些服务器在权限部分返回NS记录,因此我从该部分提取它们(如果有的话)。
  2. 查询NS记录,从答案部分提取。
  3. 问题在于“子域名”(CNAME),例如:

    > dig www.microsoft.com A

    ;; ANSWER SECTION:
    www.microsoft.com.      696     IN      CNAME   toggle.www.ms.akadns.net.
    toggle.www.ms.akadns.net. 119   IN      CNAME   g.www.ms.akadns.net.
    g.www.ms.akadns.net.    263     IN      CNAME   lb1.www.ms.akadns.net.
    lb1.www.ms.akadns.net.  31      IN      A       65.55.12.249
    

    > dig www.microsoft.com NS

    ;; ANSWER SECTION:
    www.microsoft.com.      619     IN      CNAME   toggle.www.ms.akadns.net.
    toggle.www.ms.akadns.net. 42    IN      CNAME   g.www.ms.akadns.net.
    g.www.ms.akadns.net.    186     IN      CNAME   lb1.www.ms.akadns.net.
    
    ;; AUTHORITY SECTION:
    akadns.net.             174     IN      SOA     internal.akadns.net. hostmaster.akamai.com. 1304057105 90000 90000 90000 180
    

    > dig lb1.www.ms.akadns.net A

    ;; ANSWER SECTION:
    lb1.www.ms.akadns.net.  79      IN      A       65.55.12.249
    

    > dig lb1.www.ms.akadns.net NS

    ;; AUTHORITY SECTION:
    akadns.net.             176     IN      SOA     internal.akadns.net. hostmaster.akamai.com. 1304057402 90000 90000 90000 180
    

    如您所见,没有返回NS记录。如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

你的算法错了。这是正确的。

对于目标域名S的每个连续较短的超级域T,从T本身开始:

  1. NS执行S查询。如果答案不是非空资源记录集,请转到步骤3.否则,您有一组中间域名D[]
  2. A中的每个名称执行AAAAD[]次查找。这将为您提供一组IP地址。你有答案。的 END
  3. 可选择在SOA上执行S查找。如果答案是非空资源记录集,那么您将要跨越一个管理边界,但到目前为止找不到非空NS资源记录集。根据您要查找的内容,您可以选择 ABEND
  4. 请记住,您必须向自己的resolving proxy DNS server查询,而不是向外部内容DNS服务器查询,以便获得complete answer而非部分查询。还要记住,在检查响应时您必须遵循CNAME个链。例如,上面对dig www.microsoft.com. NS查询的回复是CNAME链,导致NS lb1.www.ms.akadns.net.资源记录集。< / p>