1

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

这工作正常,直到我在本地主机上使用它。

一旦我将它上传到我的服务器上,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.comaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa过过 -'它'返回'67.215.65.132'

发生的一件更有趣的事情是,对于这些相同的域名,当我在本地主机上运行它们时。这个相同的函数返回无效。

任何帮助,将不胜感激 :)

4

2 回答 2

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;
}
于 2013-07-09T08:46:51.257 回答
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 服务。

于 2013-07-09T07:46:44.957 回答