【问题标题】:Parent nameservers父域名服务器
【发布时间】:2012-06-07 20:11:54
【问题描述】:

我一直在尝试找出如何检测与域名相关联的父名称服务器。例如,当您使用intoDNS 搜索域名时,它会显示“普通”和父名称服务器的结果。他们提到父名称服务器是什么,如下所示:

k.gtld-servers.net 非常友好地向我们提供了这些信息。

但是他们怎么知道他们必须查询这个特定的域名服务器?父名称服务器是什么的几个示例:

stackoverflow.com   k.gtld-servers.net
google.com          c.gtld-servers.net
ycombinator.com     a.gtld-servers.net
asp.net             g.gtld-servers.net
google.nl           sns-pb.isc.org
google.de           z.nic.de

似乎所有通用顶级域都可以在gtld-servers.net的某个子域中查询。

现在,我发现 PHP 中的“普通”名称服务器是这样的:

$nameservers = dns_get_record($domain_name, DNS_NS);

所以,我想知道,如何找出特定域的父名称服务器是什么,以及如何使用 PHP 查询?


更新

我发现 UNIX 的 nslookup 工具接受服务器参数。如果它留空,它将返回与 PHPs dns_get_record 相同的结果,但如果它是 http://www.iana.org/domains/root/db 上指定的顶级域的根服务器之一,它将返回与 intoDNS 列表相同的结果作为结果父服务器。

剩下的唯一问题是如何查询这个特定的服务器,因为我非常不想使用exec() 直接调用nslookup。有谁知道dns_get_record 的替代方案,它允许您指定服务器?

【问题讨论】:

  • 对不起,但是 [a-m].gtld-servers.net。仅对 .com 和 .net 具有权威性,否则会将您指向根服务器(或给出错误)。

标签: php dns nameservers


【解决方案1】:

我已经找到了方法。我不得不为此使用NET_DNS2 PEAR 包,因为它允许您指定要使用的 DNS 服务器。如果我指定文件 nickc 中列出的服务器之一:

http://www.iana.org/domains/root/db

(您必须为要查询的顶级域使用其中一台服务器,不管是哪一台)

require 'Net/DNS2.php';

$server = gethostbyname('j.gtld-servers.net'); // 192.48.79.30

$r = new Net_DNS2_Resolver(array('nameservers' => array($server)));
$result = $r->query('stackoverflow.com', 'NS');

print_r ($result);

这将打印:

...
    [authority] => Array
        (
            [0] => Net_DNS2_RR_NS Object
                (
                    [nsdname] => ns1.webfaction.com
                    [name] => webassay.com
                    [type] => NS
                    [class] => IN
                    [ttl] => 172800
                    [rdlength] => 17
                    [rdata] => ns1webfaction�
                )

            [1] => Net_DNS2_RR_NS Object
                (
                    [nsdname] => ns2.webfaction.com
                    [name] => webassay.com
                    [type] => NS
                    [class] => IN
                    [ttl] => 172800
                    [rdlength] => 6
                    [rdata] => ns2�.
                )

            [2] => Net_DNS2_RR_NS Object
                (
                    [nsdname] => ns3.webfaction.com
                    [name] => webassay.com
                    [type] => NS
                    [class] => IN
                    [ttl] => 172800
                    [rdlength] => 6
                    [rdata] => ns3�.
                )

        )
...

这与父服务器在 intoDNS:http://www.intodns.com/stackoverflow.com 返回的名称服务器相匹配

【讨论】:

  • 为什么不使用递归名称服务器而不是权威名称服务器进行解析?尝试 8.8.8.8、8.8.4.4、4.2.2.1、4.2.2.2 或 99.99.99.99。
【解决方案2】:

特定域的名称服务器是在区域文件中指定为“NS”记录的名称服务器。您列出的主机/服务器是维护相关域的特定 TLD 信息的全局/根服务器。

如果你想知道这些是什么,你可以看这里:http://www.iana.org/domains/root/db

【讨论】:

  • 这已经很有帮助了,谢谢!现在问题的一部分已经解决了,但是我该如何查询呢? (我在回答中添加了更多信息)
猜你喜欢
  • 2017-10-09
  • 2011-09-21
  • 2011-02-10
  • 2012-04-08
  • 1970-01-01
  • 2018-08-09
  • 2010-12-08
  • 2013-07-12
  • 2013-10-02
相关资源
最近更新 更多