首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得域A(和AAAA)记录的完整列表?

如何获得域A(和AAAA)记录的完整列表?
EN

Server Fault用户
提问于 2020-04-30 15:34:05
回答 1查看 330关注 0票数 1

假设我想知道一个域的A和AAAA记录,例如:google.com

我可以使用host

代码语言:javascript
复制
$ host google.com 
google.com has address 172.217.169.46
google.com has IPv6 address 2a00:1450:4009:801::200e
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.

但这显然并没有全部列出,就像我直接查询名称服务器一样,我得到了不同的答案:

代码语言:javascript
复制
$  host google.com ns2.google.com
Using domain server:
Name: ns2.google.com
Address: 216.239.34.10#53
Aliases: 

google.com has address 216.58.205.46
google.com has IPv6 address 2a00:1450:4009:808::200e
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.

结果似乎与查询的查询不同.所以我推断发生了什么事情,DNS服务器没有告诉整个情况。

从另一个角度来看,如果您去查看像robtex.com这样的站点,并在那里查找域,那么我的查询将不会返回很长的IP列表:

https://www.robtex.com/dns-lookup/google.com#records

它当前列出了这个长的IP编号集合:

代码语言:javascript
复制
 2404:6800:4003:c02::8b
 2404:6800:4004:807::200e
 2404:6800:4006:803::200e
 2607:f8b0:4004:811::200e
 2607:f8b0:4005:802::200e
 2607:f8b0:4005:808::200e
 2607:f8b0:400a:809::200e
 2800:3f0:4001:803::200e
 2a00:1450:400b:805::200e
 74.125.68.100
 74.125.68.101
 74.125.68.102
 74.125.68.113
 74.125.68.138
 74.125.68.139
 172.217.0.46
 172.217.5.110
 172.217.15.110
 172.217.27.78
 172.217.29.14
 172.217.171.14
 216.58.194.174
 216.58.199.46

如果正确的话,我从host得到的答案只是暗示了真实的情况。

我如何才能得到一个完整和权威的答案?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-04-30 16:59:35

从客户端来看,您可能永远无法了解全部情况,因为许多DNS端点都在使用GeoDNS和其他基于GeoLocation的负载平衡。

但是,假设您可以访问分布在全球各地的客户端,则可以使用GNU进行此操作。

您首先需要找到要查询的根名服务器--获取根名服务器的列表,只需运行dig。获取一个输出服务器(在本例中为1.rot-servers.net)并查询它:dig @l.root-servers.net -t NS DOMAIN.NEt (生成如下所示的输出:

代码语言:javascript
复制
 ;; AUTHORITY SECTION:
 net.                    172800  IN      NS      a.gtld-servers.net.
 net.                    172800  IN      NS      b.gtld-servers.net.
 net.                    172800  IN      NS      c.gtld-servers.net.
 net.                    172800  IN      NS      d.gtld-servers.net.
 net.                    172800  IN      NS      e.gtld-servers.net.
 net.                    172800  IN      NS      f.gtld-servers.net.
 net.                    172800  IN      NS      g.gtld-servers.net.
 net.                    172800  IN      NS      h.gtld-servers.net.
 net.                    172800  IN      NS      i.gtld-servers.net.
 net.                    172800  IN      NS      j.gtld-servers.net.
 net.                    172800  IN      NS      k.gtld-servers.net.
 net.                    172800  IN      NS      l.gtld-servers.net.
 net.                    172800  IN      NS      m.gtld-servers.net.

 ;; ADDITIONAL SECTION:
 a.gtld-servers.net.     172800  IN      A       192.5.6.30
 b.gtld-servers.net.     172800  IN      A       192.33.14.30
 c.gtld-servers.net.     172800  IN      A       192.26.92.30
 d.gtld-servers.net.     172800  IN      A       192.31.80.30
 e.gtld-servers.net.     172800  IN      A       192.12.94.30
 f.gtld-servers.net.     172800  IN      A       192.35.51.30
 g.gtld-servers.net.     172800  IN      A       192.42.93.30
 h.gtld-servers.net.     172800  IN      A       192.54.112.30
 i.gtld-servers.net.     172800  IN      A       192.43.172.30
 j.gtld-servers.net.     172800  IN      A       192.48.79.30
 k.gtld-servers.net.     172800  IN      A       192.52.178.30
 l.gtld-servers.net.     172800  IN      A       192.41.162.30
 m.gtld-servers.net.     172800  IN      A       192.55.83.30

这将给出TLD名称服务器的列表。现在,如果您想要一个全局完整的视图,您将需要执行来自分布在全球各地的客户端的其余查询(使用CDN或其他类似的)。

要获得真正完整的视图,您应该从所有全局客户端端点迭代所有这些名称服务器;但是,您可以通过快捷方式查询其中之一,以获取它们所知道的目标域的所有名称服务器:dig @a.gtld-servers.net. -t NS DOMAIN.NET

会给你这样的东西:

代码语言:javascript
复制
 ;; OPT PSEUDOSECTION:
 ; EDNS: version: 0, flags:; udp: 4096
 ;; QUESTION SECTION:
 ;DOMAIN.NET.                   IN      NS

 ;; AUTHORITY SECTION:
 domain.net.            172800  IN      NS      a.dns.domain.net.
 domain.net.            172800  IN      NS      b.dns.domain.net.
 domain.net.            172800  IN      NS      c.dns.domain.net.

 ;; ADDITIONAL SECTION:
 a.dns.domain.net.        172800  IN      A       173.246.98.1
 b.dns.domain.net.        172800  IN      A       213.167.229.1
 c.dns.domain.net.        172800  IN      A       217.70.179.1

^这是domain.net名称服务器的起始列表。给他们打个记号。

接下来,迭代这些输出名称服务器,并确保它们不委托给其他名称服务器:dig @c.dns.domain.net -t NS DOMAIN.NET

如果这会产生从上一次查询中没有列出的任何名称服务器,请将它们添加到要查询的DOMAIN.NET名称服务器列表中。

现在,迭代您的DOMAIN.NET名称服务器列表,并像这样查询每个服务器(其中$NAME_SERVER是您当前正在查询的列表中的名称服务器):

代码语言:javascript
复制
dig -t A @$NAME_SERVER domain.net
dig -t AAAA @$NAME_SERVER domain.net

将上述两个查询的结果添加到DOMAIN.NET的A和AAAA记录列表中。

一旦您从所有全局分布的客户端查询了所有权威的名称服务器,您将有一个相当完整的视图。

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

https://serverfault.com/questions/1014992

复制
相关文章

相似问题

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