从" gethostbyaddr"提取主机名串

时间:2016-03-28 08:28:38

标签: php

我希望从ip地址中提取确切的主机名,但我收到的是整个地址字符串。

我只想从字符串中提取主机名。任何人都可以指出我正确的方向吗?

以下是所使用代码的片段: -



<?php

    $ip = $_SERVER['REMOTE_ADDR'];
    $fullhost = gethostbyname(gethostbyaddr($ip));
    $host = preg_replace("/^[^.]+./", "*.", $fullhost);
?>

Host: <?=$host?>
&#13;
&#13;
&#13;

从中收到的输出是: -

  

主持人:* .36.64.182.airtelbroadband.in

我只想向用户显示Airtel Broadband而不是其他内容

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

$host      = gethostbyaddr($_SERVER['REMOTE_ADDR']); // gets the full hostname
$hostNames = explode(".", $host);      // explodes into parts divided by DOT
echo $hostNames[count($hostNames)-2]; // take what you need
// $hostNames[count($hostNames)-1];   -> in
// $hostNames[count($hostNames)-2];   -> airtelbroadband

您可能还想查看geoip 这是一个基本的PHP扩展,可以使用PECL安装。

  

string geoip_isp_by_name (字符串$ hostname)
  geoip_isp_by_name()函数将返回分配了IP的Internet服务提供商(ISP)的名称。

     

此功能目前仅适用于购买商用GeoIP ISP版的用户。如果找不到合适的数据库,将发出警告。

答案 1 :(得分:0)

考虑这个简单的例子:

<?php
$subject = 'Host: *.36.64.182.airtelbroadband.in';
$pattern = '/^Host:\s+((\*|\d+)\.){4}(.+)\..+$/';
preg_match($pattern, $subject, $tokens);
var_dump($tokens[3]);

输出显然是:

string(15) "airtelbroadband"

这是您可以从输入中删除的所有信息。如果你真的想以某种方式展示公知的公司名称&#34; (与技术网络名称相对),那么您需要使用某种形式的目录。很难以某种方式直接从网络中检索这些信息。您可以试试whois数据库。但解析那个输出将是一项非常艰巨的任务......