5

我一直在尝试找出如何检测与域名相关联的父名称服务器。例如,当您使用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

似乎所有通用 TLD都可以在gtld-servers.net.

现在,我在 PHP 中找到了这样的“普通”名称服务器:

$nameservers = dns_get_record($domain_name, DNS_NS);

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


更新

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

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

4

2 回答 2

2

我已经找到了怎么做。我不得不为此使用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

于 2012-06-04T22:23:49.857 回答
0

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

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

于 2012-06-03T11:04:59.363 回答