2014-03-04 119 views
0

我正在尝试为我正在构建的服务做一些DNS ping操作。checkdnsrr总是返回True

该业务之一是检查CNAME & /或通过一个URL的A记录,并返回布尔值

虽然看起来工作良好的有效网址的,无效的(是的,我” VE检查),但它仍然是返回true

代码

// Check DNS records 
    private function DoDNSCheck($url){ 
     $url = $this->GetHost($url); 
     echo '<pre>'; 
     $tr = dns_get_record($url, DNS_A + DNS_CNAME); 
     print_r($tr); 
     echo '</pre>'; 
     return (bool)(checkdnsrr($url, "CNAME") || checkdnsrr($url, "A")); 
    } 
    private function GetHost($url){ 
     try{ 
      $parseUrl = parse_url(trim($url)); 
      return trim($parseUrl['host']); 
     } catch(Exception $e) { 
      var_dump($e->getMessage()); 
     } 
    } 

我在做什么错?

p.s.我的服务器DNS设置从我的路由器中检索,该路由器使用我的ISP的DNS服务器。这个问题仍然是即使我尝试使用谷歌的和OpenDNS的

我甚至得到有效的响应返回从dns_get_record检查

通过上面的功能,我得到:

Array 
(
[0] => Array 
    (
     [host] => www.sadfsdffoijoiuyiuoinsdf.com 
     [class] => IN 
     [ttl] => 10 
     [type] => A 
     [ip] => 69.16.143.25 
    ) 

[1] => Array 
    (
     [host] => www.sadfsdffoijoiuyiuoinsdf.com 
     [class] => IN 
     [ttl] => 10 
     [type] => A 
     [ip] => 198.105.251.24 
    ) 

) 

bool(true)

返回测试DoDNSCheck('http://www.sadfsdffoijoiuyiuoinsdf.com');

+0

您正在将'$ Address'传递给'GetHost()',但您使用并未定义'$ URL'。也许不是问题,但仍然。 – AbraCadaver

+2

它看起来像您的ISP有一个DNS代理,将所有失败的查找重定向到搜索引擎。 – Barmar

+2

这些地址去search.charter.net – Barmar

回答

0

此行错误:

$Address = ((strpos($URL, "http://") !== false) || (strpos($URL, "https://") !== false)) ? 'http://' . $Address : $Address; 

您正在使用错误的变量$URL,而逻辑反向。它应该是:

+0

请查看我更新的问题 – Kevin