13

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

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

如果我使用以下内容:

gethostbyaddr($_SERVER['REMOTE_ADDR']);

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

4

15 回答 15

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>
于 2011-03-25T05:35:33.573 回答
10

这似乎是您要查找的内容,如果可能,它将尝试返回完整的主机名:

http://us3.php.net/gethostbyaddr

于 2009-05-13T03:47:34.490 回答
8

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

于 2009-05-13T04:29:39.397 回答
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

于 2016-10-17T23:09:33.770 回答
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> 
于 2011-09-01T09:32:33.460 回答
1

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

于 2010-03-18T06:20:25.570 回答
1

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

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

但请注意,您需要将 geoip db 放在您的机器上才能使其工作,所有说明都在那里 :)

于 2009-05-13T07:45:18.607 回答
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>

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

于 2014-11-25T18:49:02.697 回答
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。

于 2019-02-16T10:04:50.847 回答
1

您可以从 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();

?>
于 2019-06-26T15:08:51.067 回答
0

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

于 2009-05-13T03:47:27.873 回答
0

http://whatismyip.com

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

于 2009-05-13T04:44:39.433 回答
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>";

页面底部的 API 详细信息。

于 2019-06-30T07:27:00.087 回答
0
<?php
$isp = geoip_isp_by_name('www.example.com');
if ($isp) {
    echo 'This host IP is from ISP: ' . $isp;
}
?>

(PECL geoip >= 1.0.2)

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

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

于 2017-10-24T08:59:54.170 回答
-1

这是从站点或 ip 查找 isp 的正确方法。

<?php
$isp = geoip_isp_by_name('www.example.com');
if ($isp) {
    echo 'This host IP is from ISP: ' . $isp;
}
?>
于 2013-04-15T23:32:32.273 回答