我希望从ip地址中提取确切的主机名,但我收到的是整个地址字符串。
我只想从字符串中提取主机名。任何人都可以指出我正确的方向吗?
以下是所使用代码的片段: -
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$fullhost = gethostbyname(gethostbyaddr($ip));
$host = preg_replace("/^[^.]+./", "*.", $fullhost);
?>
Host: <?=$host?>
&#13;
从中收到的输出是: -
主持人:* .36.64.182.airtelbroadband.in
我只想向用户显示Airtel Broadband而不是其他内容
答案 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
数据库。但解析那个输出将是一项非常艰巨的任务......