gethostbyname()在域验证时显示奇怪的结果

时间:2013-07-09 07:31:04

标签: php gethostbyname

这是用于使用gethostbyname()验证域名的代码。

这在我在localhost上使用它之前工作正常。

我在服务器上传后,gethostbyname()也开始返回未知域名的IP地址。

$url=$_GET['d'];
function getHost($Address) { 
           $parseUrl = parse_url(trim($Address)); 
           return trim($parseUrl['host'] ? $parseUrl['host'] : array_shift(explode('/', $parseUrl['path'], 2))); 
        }

  $get=getHost($url);
  $domain = str_ireplace('www.', '', $get);

 if(filter_var(gethostbyname($domain), FILTER_VALIDATE_IP))
{
echo gethostbyname($domain);
echo $domain;
}
else
{
echo gethostbyname($domain);
   echo "Not Valid";
}

我的测试用例是: -

1)www-它返回184.173.134.234

2)google.coma-它返回67.215.65.132

3)google.comaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - 它返回67.215.65.132

另一个有趣的事情是,当我在我的localhost上运行它们时,对于这些相同的域名。这个相同的函数返回无效。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:2)

基于Ben D的答案和研究......

# Get the URL from the GET Parameters
$url = $_GET['d'];

# Derive the HTTP Host
$hostname = parse_url( $url , PHP_URL_HOST );
# Strip the "WWW." from the hostname if present
$hostname = preg_replace( '/^www\./i' , '' , $hostname );

# Look for the IP Address
$ip_address = gethostbyname( $hostname );

if( filter_var( $hostname , FILTER_VALIDATE_IP ) ){
  echo 'Hostname is an IP Address already';
  echo $hostname;
}elseif( $ip_address==$hostname || $ip_address=='67.215.65.132' ){
  echo 'Domain Not Found';
}elseif( filter_var( $ip_address , FILTER_VALIDATE_IP ) ){
  echo $ip_address;
  echo $hostname;
}else{
  echo 'Invalid IP Address Returned';
  echo $ip_address;
  echo $hostname;
}

答案 1 :(得分:1)

67.215.65.132是OpenDNS使用的“不可用”重定向:

IP + HOSTNAME INFORMATION
IP: 67.215.66.132 Hostname:hit-servfail.opendns.com
Active Servers: http/80 https/443 LOCATION

您的DNS服务正在尝试查找无效域,但什么都没找到,因此它会尝试将您重定向到默认的“不可用”IP地址...如果这是一个自托管项目,请尝试切换您的DNS服务。