【问题标题】:Get Cname records with NetDNS or get_dns_record使用 NetDNS 或 get_dns_record 获取 Cname 记录
【发布时间】:2012-12-29 04:54:18
【问题描述】:

我正在尝试使用 PHP 获取 CNAME 记录列表。

当我在旧的 Windows 7 机器上托管代码时,此方法曾经有效,但我将其移至 Ubuntu 机器(类似的 AMP 堆栈设置),它不再返回 $url 的 CNAME 记录。我将代码上传到 Windows 服务器,但仍然没有 CNAME 记录。

$records['cname'] = dns_get_record($url, DNS_CNAME);

并不是说我声称操作系统与任何事情有很大关系,也许我在我的旧机器上以某种方式设置了一些东西,让它可以工作。它当前返回一个简单的空数组,因为它曾经返回与我的 DNS 管理服务中的内容匹配的 CNAME 记录列表。我在这里读过这篇文章:

Why wouldn't dns_get_record show CNAMEs when I KNOW they exist?

并最终尝试使用 Pear 的 NetDns2 库实现该功能,并使用以下代码。而且,响应的answer 数组仍然是空的。不确定从 get_dns_record 到 NetDNS2 的问题是否相同,或者我在这两种情况下都做错了什么,但测试的站点肯定有 CNAME 记录,包括 google.comyahoo.com

//using Google Name Server
$rslvr = new Net_DNS2_Resolver(array('nameservers' => array('8.8.8.8')));
$records['cname'] = $rslvr->query($url, 'CNAME');

感谢任何帮助,最终目标是能够获得 CNAME 记录列表,就像我在旧机器上一样。

【问题讨论】:

    标签: php dns pear


    【解决方案1】:

    适用于 PHP 5.4.9。

    第一条记录(cweiske.de)不是CNAME而是直接指向一个IP地址:

    php > var_dump(dns_get_record('cweiske.de', DNS_CNAME));
    array(0) {
    }
    

    第二个实际上是第一个记录的 CNAME:

    php > var_dump(dns_get_record('www.cweiske.de', DNS_CNAME));
    array(1) {
      [0] =>
      array(5) {
        'host' =>
        string(14) "www.cweiske.de"
        'class' =>
        string(2) "IN"
        'ttl' =>
        int(86400)
        'type' =>
        string(5) "CNAME"
        'target' =>
        string(10) "cweiske.de"
      }
    }
    

    dig 显示相同:

    $ dig cweiske.de
    cweiske.de.     577 IN  A   83.169.7.198
    
    $ dig www.cweiske.de
    www.cweiske.de.     86397   IN  CNAME   cweiske.de.
    cweiske.de.     597 IN  A   83.169.7.198
    

    要检查是你的问题还是 PHP 的问题,请使用 dig 或 nslookup 进行测试。

    【讨论】:

    • 您的两个结果都与我的预期相反。 dns_get_record('domain.com', DNS_CNAME); 应返回该域的 CNAME 记录列表,包括 a.domain.com、b.domain.com 和 www.domain.com。基本上,您使用dns_get_recorddig 所能完成的工作就是确认您输入的URL 是CNAME 记录并且需要指向A 记录。以前,dns_get_record 在传递 DNS_CNAME 作为参数时按我预期的方式工作 - 它仍然与 DNS_MX 和 DNS_NS 一样工作。
    • 无法获取给定服务器的所有子域的列表。 NS 列出给定域的名称服务器,MX 列出给定域的邮件服务器。 A 为您提供域的 IP,CNAME 为您提供 CNAME“父级”(如果域有一个)。我认为您误解了 DNS 允许什么和不允许什么。
    • 想象一下,如果您向“.com”询问他们的 CNAME 或他们的身份会发生什么 - 他们会给您 .com 的所有子域。
    • 在不使用 AXFR 的情况下无法正常使用。见stackoverflow.com/q/131989/282601
    • 你问的问题有答案了;我给了。不过,这不是您要问的问题 :) 感谢您的接受。
    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2017-06-18
    • 2018-06-24
    • 2020-06-27
    • 1970-01-01
    • 2021-10-08
    • 2012-11-30
    相关资源
    最近更新 更多