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