如何通过PHP检索访问者的ISP?

时间:2009-05-13 03:43:45

标签: php

如何找到查看PHP页面的人的ISP提供商?

是否可以使用PHP来跟踪或显示它?

如果我使用以下内容:

gethostbyaddr($_SERVER['REMOTE_ADDR']);

它返回我的IP地址,而不是我的主机名或ISP。

15 个答案:

答案 0 :(得分:10)

这似乎是您正在寻找的,如果可能,它将尝试返回完整的主机名:

http://us3.php.net/gethostbyaddr

答案 1 :(得分:10)

您可以从以下PHP编码中获取所有这些内容。

<?php

$ip=$_SERVER['REMOTE_ADDR'];

$url=file_get_contents("http://whatismyipaddress.com/ip/$ip");

preg_match_all('/<th>(.*?)<\/th><td>(.*?)<\/td>/s',$url,$output,PREG_SET_ORDER);

$isp=$output[1][2];

$city=$output[9][2];

$state=$output[8][2];

$zipcode=$output[12][2];

$country=$output[7][2];

?>
<body>
<table align="center">
<tr><td>ISP :</td><td><?php echo $isp;?></td></tr>
<tr><td>City :</td><td><?php echo $city;?></td></tr>
<tr><td>State :</td><td><?php echo $state;?></td></tr>
<tr><td>Zipcode :</td><td><?php echo $zipcode;?></td></tr>
<tr><td>Country :</td><td><?php echo $country;?></td></tr>
</table>
</body>

答案 2 :(得分:9)

HTTP标头中没有任何内容可以指示用户来自哪个 ISP ,所以答案是否定的,没有PHP内置函数会告诉您这一点。您必须使用某种服务或库将IP映射到网络/ ISP。

答案 3 :(得分:4)

为什么不使用ARIN的REST API。

<?php

// get IP Address
$ip=$_SERVER['REMOTE_ADDR'];

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, 'http://whois.arin.net/rest/ip/' . $ip);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));

// execute
$returnValue = curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

$result = json_decode($returnValue);

echo <<<END
<pre>
Handle: {$result->net->handle->{'$'}}
Ref: {$result->net->ref->{'$'}}
Name: {$result->net->name->{'$'}}
echo "OrgRef: {$result->net->orgRef->{'@name'}}";
</pre>
END;

// eof

https://www.arin.net/resources/whoisrws/whois_api.html

答案 4 :(得分:2)

有时字段会发生变化,所以这是对上述帖子的改进。

<body> 
    <table align="center">

<?
 $ip=$_SERVER['REMOTE_ADDR'];
 $url=file_get_contents("http://whatismyipaddress.com/ip/$ip");
 preg_match_all('/<th>(.*?)<\/th><td>(.*?)<\/td>/s',$url,$output,PREG_SET_ORDER);
 for ($q=0; $q < 25; $q++) {
    if ($output[$q][1]) {
        if (!stripos($output[$q][2],"Blacklist")) {
            echo "<tr><td>".$output[$q][1]."</td><td>".$output[$q][2]."</td></tr>";

        }
    }
}
?> 
    </table>
</body> 

答案 5 :(得分:1)

转到http://whatismyip.com

这将为您提供您的网址。将该地址插入http://arin.net/whois

的数据库

答案 6 :(得分:1)

GeoIP将为您提供帮助:http://www.maxmind.com/app/locate_my_ip

有一个用于访问geoip数据的php库:http://www.maxmind.com/app/php

但请注意,您需要将geoip数据库放在您的计算机上以使其正常工作,所有说明都在那里:)

答案 7 :(得分:1)

您不能依赖IP地址或主机名来了解某人正在使用的ISP。 事实上,他可能根本不使用ISP,或者他可能通过VPN连接登录到他的工作地点,从那里使用另一个VPN或远程桌面到世界各地的托管服务,并从那里连接到你。 您将获得的IP地址将来自最后一台远程计算机或该计算机位于其后可能位于其他位置的某个防火墙。

答案 8 :(得分:1)

我试图纠正Ram Kumar的回答,但每当我编辑他们的帖子时,我都会被暂时禁止,我的更改被忽略了。 (至于为什么,我不知道,这是我在本网站上做过的第一次也是唯一的编辑。)

自从他的帖子以来,由于网站更改和管理员实施基本机器人检查(检查标题),他的代码不再起作用了:

<?php
$IP = $_SERVER['REMOTE_ADDR'];

$User_Agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0';
$Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$Accept_Language = 'en-US,en;q=0.5';
$Referer = 'http://whatismyipaddress.com/';
$Connection = 'keep-alive';

$HTML = file_get_contents("http://whatismyipaddress.com/ip/$IP", false, stream_context_create(array('http' => array('method' => 'GET', 'header' => "User-Agent: $User_Agent\r\nAccept: $Accept\r\nAccept-Language: $Accept_Language\r\nReferer: $Referer\r\nConnection: $Connection\r\n\r\n"))));

preg_match_all('/<th>(.*?)<\/th><td>(.*?)<\/td>/s', $HTML, $Matches, PREG_SET_ORDER);

$ISP = $Matches[3][2];
$City = $Matches[11][2];
$State = $Matches[10][2];
$ZIP = $Matches[15][2];
$Country = $Matches[9][2];
?>
<body>
    <table align="center">
        <tr><td>ISP :</td><td><?php echo $ISP;?></td></tr>
        <tr><td>City :</td><td><?php echo $City;?></td></tr>
        <tr><td>State :</td><td><?php echo $State;?></td></tr>
        <tr><td>Zipcode :</td><td><?php echo $ZIP;?></td></tr>
        <tr><td>Country :</td><td><?php echo $Country;?></td></tr>
    </table>
</body>

请注意,仅提供用户代理可能就足够了,并且很可能不需要额外的标头,我只是添加它们以使请求看起来更真实。

答案 9 :(得分:1)

如果所有这些答案都没有用,那么您可以尝试API方式。

1。http://extreme-ip-lookup.com/json/[IP这里的地址]

示例: http://extreme-ip-lookup.com/json/106.192.146.13

2。http://ip-api.com/json/[IP这里的地址]

示例: http://ip-api.com/json/113.14.168.85

对您有用后,别忘了将JSON转换为PHP。

答案 10 :(得分:0)

我认为您需要使用某些第三方服务(可能是Web服务)来查找IP并找到服务提供商。

答案 11 :(得分:0)

<?php
$isp = geoip_isp_by_name('www.example.com');
if ($isp) {
    echo 'This host IP is from ISP: ' . $isp;
}
?>

(PECL geoip&gt; = 1.0.2)

geoip_isp_by_name - 获取Internet服务提供商(ISP)名称

http://php.net/manual/ru/function.geoip-isp-by-name.php

答案 12 :(得分:0)

您可以从ipinfo.io或类似服务获取此信息。

<?php

/**
 * Get ip info from ipinfo.io
 *
 * There are other services like this, for example
 * http://extreme-ip-lookup.com/json/106.192.146.13
 * http://ip-api.com/json/113.14.168.85
 *
 * source: https://stackoverflow.com/a/54721918/3057377
 */
function getIpInfo($ip = '') {
    $ipinfo = file_get_contents("https://ipinfo.io/" . $ip);
    $ipinfo_json = json_decode($ipinfo, true);
    return $ipinfo_json;
}

function displayIpInfo($ipinfo_json) {
    var_dump($ipinfo_json);
    echo <<<END
<pre>
ip      : {$ipinfo_json['ip']}
city    : {$ipinfo_json['city']}
region  : {$ipinfo_json['region']}
country : {$ipinfo_json['country']}
loc     : {$ipinfo_json['loc']}
postal  : {$ipinfo_json['postal']}
org     : {$ipinfo_json['org']}
</pre>
END;
}

function main() {
    echo("<h1>Server IP information</h1>");
    $ipinfo_json = getIpInfo();
    displayIpInfo($ipinfo_json);

    echo("<h1>Visitor IP information</h1>");
    $visitor_ip = $_SERVER['REMOTE_ADDR'];
    $ipinfo_json = getIpInfo($visitor_ip);
    displayIpInfo($ipinfo_json);
}

main();

?>

答案 13 :(得分:0)

一种快速的替代方法。 (该网站每分钟最多允许50个呼叫。)

$json=file_get_contents("https://extreme-ip-lookup.com/json/$ip");
extract(json_decode($json,true));
echo "ISP: $isp ($city, $region, $country)<br>";

page底部的API详细信息。

答案 14 :(得分:-1)

这是从网站或IP中找到isp的正确方法。

<?php
$isp = geoip_isp_by_name('www.example.com');
if ($isp) {
    echo 'This host IP is from ISP: ' . $isp;
}
?>