0

我使用以下步骤:

  1. 查询主机的 A 记录,一些服务器在权限部分返回 NS 记录,所以我从该部分中提取它们,如果有的话。
  2. 查询 NS 记录,从答案部分中提取它们。

问题在于“子域”(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 记录。如何克服这个问题?

4

1 回答 1

1

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

S对于目标域名的每个连续更短的超域T,从它T自己开始:

  1. 对执行NS查找S。如果答案不是非空资源记录集,则转到步骤 3。否则,您有一组中间域名D[]
  2. 对 中的每个名称执行AAAAA查找D[]。这将为您提供一组 IP 地址。你有你的答案。 结束
  3. 可以选择SOAS. 如果答案是非空资源记录集,那么您将要跨越管理边界,NS到目前为止还没有找到非空资源记录集。您可以根据您想要找出的确切内容选择ABEND

请记住,您必须查询自己的解析代理 DNS 服务器,而不是外部内容 DNS 服务器,以便获得完整的答案而不是部分答案。还要记住,CNAME在检查响应时必须遵循链。dig www.microsoft.com. NS例如,对上述查询的响应是一条CNAME链,指向一个 NS的资源记录集lb1.www.ms.akadns.net.

于 2011-05-17T12:25:17.277 回答