Как получить посетителя ISP через PHP?

Как узнать провайдера ISP человека, просматривающего страницу PHP?

Можно ли использовать PHP для отслеживания или обнаружения?

Если я использую что-то вроде следующего:

gethostbyaddr($_SERVER['REMOTE_ADDR']);

он возвращает мой IP-адрес, а не мое имя хоста или интернет-провайдера.

Ответ 1

Это похоже на то, что вы ищете, оно попытается вернуть полное имя хоста, если это возможно:

http://us3.php.net/gethostbyaddr

Ответ 2

В заголовках HTTP ничего нет, чтобы указать, какой из ISP пользователь приходит, поэтому ответ отрицательный, не существует встроенной функции PHP, которая вам скажет. Вам придется использовать какой-то сервис или библиотеку, которая отображает IP-адреса в сетях/интернет-провайдерах.

Ответ 3

РЕДАКТИРОВАТЬ: этот метод больше не работает, так как веб-сайт, который он посещает, теперь блокирует автоматические запросы (и ранее этот метод нарушал условия использования веб-сайта). Ниже приведены несколько других хороших [юридических!] Ответов (включая мою альтернативу в этом)


Вы можете получить все эти вещи из следующих кодировок 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>

Ответ 4

Почему бы не использовать API ARIN REST.

<?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

Ответ 5

Иногда меняются поля, поэтому это улучшение вышеприведенного сообщения.

<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> 

Ответ 7

GeoIP поможет вам в этом: http://www.maxmind.com/app/locate_my_ip

Существует библиотека php для доступа к данным геоинформации: http://www.maxmind.com/app/php

Внимание, однако, вам нужно поместить geoip db на свой компьютер, чтобы он работал, все инструкции есть:)

Ответ 8

Вы не можете полагаться ни на IP-адрес, ни на имя хоста, чтобы знать, кто использует ISP. Фактически, он вообще не может использовать интернет-провайдера, или он может войти в систему через VPN-соединение с его местом работы, оттуда используя другой VPN или удаленный рабочий стол для службы хостинга на полпути по всему миру и подключиться к вам из этого, IP-адрес, который вы получите, будет иметь тот, который находится на последней удаленной машине или на каком-то брандмауэре, который сидит за машиной, которая может быть где-то еще.

Ответ 9

Я попытался исправить ответ Рама Кумара, но всякий раз, когда я редактировал их сообщение, я был бы временно запрещен, и мои изменения были проигнорированы. (Что касается того, почему, я не знаю, это было мое первое и единственное редактирование, которое я когда-либо делал на этом сайте.)

С момента своего сообщения его код больше не работает из-за изменений веб-сайта, а администратор выполняет базовые проверки ботов (проверка заголовков):

<?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>

Обратите внимание, что просто поставка агента-пользователя, вероятно, будет достаточным, и дополнительные заголовки, скорее всего, не требуются, я просто добавил их, чтобы сделать запрос более аутентичным.

Ответ 11

Я думаю, вам нужно использовать сторонний сервис (возможно, веб-сервис) для поиска IP-адреса и поиска поставщика услуг.

Ответ 12

<?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 - получить имя поставщика услуг Интернета (ISP)

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

Ответ 13

Вы можете получить эту информацию от 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();

?>

Ответ 14

Быстрая альтернатива. (Этот сайт позволяет до 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 внизу страницы.

Ответ 15

Это правильный способ найти ISP с сайта или ip.

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