Как узнать провайдера ISP человека, просматривающего страницу PHP?
Можно ли использовать PHP для отслеживания или выявления?
Если я использую что-то вроде следующего:
gethostbyaddr($_SERVER['REMOTE_ADDR']);
он возвращает мой IP-адрес, а не мое имя хоста или интернет-провайдера.
Вы можете получить все эти вещи из следующих кодировок 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>
Кажется, это то, что вы ищете, оно попытается вернуть полное имя хоста, если это возможно:
В заголовках HTTP нет ничего, чтобы указать, из какого ISP- пользователя приходит пользователь, поэтому ответ отрицательный, нет встроенной функции PHP, которая скажет вам об этом. Вам придется использовать какой-то сервис или библиотеку, которая отображает IP-адреса в сетях / интернет-провайдерах.
Иногда меняются поля, поэтому это улучшение выше поста.
<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>
GeoIP поможет вам в этом: http://www.maxmind.com/app/locate_my_ip
Существует библиотека php для доступа к данным геоинформации: http://www.maxmind.com/app/php
Внимание, однако, вам нужно поместить geoip db на ваш компьютер, чтобы он работал, все инструкции есть 🙂
Вы не можете полагаться ни на IP-адрес, ни на имя хоста, чтобы знать, кто использует ISP. Фактически, он вообще не может использовать интернет-провайдера, или он может войти в систему через VPN-соединение с его местом работы, оттуда используя другой VPN или удаленный рабочий стол для службы хостинга на полпути по всему миру и подключиться к вам из этого , IP-адрес, который вы получите, будет тот, который находится на последней удаленной машине или на каком-то брандмауэре, который сидит за машиной, которая может быть где-то еще.
Почему бы не использовать API REST ARIN.
<?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
Я думаю, вам нужно использовать сторонний сервис (возможно, веб-сервис) для поиска IP-адреса и поиска поставщика услуг.
перейдите на страницу http://whatismyip.com
это даст вам ваш интернет-адрес. Подключите этот адрес в базу данных по адресу http://arin.net/whois
Я попытался исправить ответ Рама Кумара, но всякий раз, когда я редактировал их сообщение, я был бы временно запрещен, и мои изменения были проигнорированы. (Что касается того, почему, я не знаю, это было мое первое и единственное редактирование, которое я когда-либо делал на этом сайте.)
Начиная с его поста, его код больше не работает из-за изменений веб-сайта, а администратор выполняет базовые проверки ботов (проверка заголовков):
<?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>
Обратите внимание, что просто поставка пользовательского агента, вероятно, будет достаточным, и дополнительные заголовки, скорее всего, не потребуются, я просто добавил их, чтобы сделать запрос более аутентичным.
<?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)
Это правильный способ найти ISP с сайта или ip.
<?php $isp = geoip_isp_by_name('www.example.com'); if ($isp) { echo 'This host IP is from ISP: ' . $isp; } ?>