Информация о IP адресе пользователя

lena1

クリエイター
LV
0
 
<b>Задача</b>: узнать IP адрес пользователя, а затем узнать полную информацию об этом Ip адресе.
Для этого в php предусмотрены функции с Whois - сервером.
Сам по себе Ip адрес представляет из себя набор цифр, для того, чтобы выяснить кому он принадлежит из какой страны и города собственник данного Ip адреса, мы и должны подключиться к Whois - серверу.

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--><?php
&nbsp;&nbsp;&nbsp;&nbsp;// функция по определению ip
function ip(){
&nbsp;&nbsp;&nbsp;&nbsp;if ( getenv ('REMOTE_ADDR')) {$user_ip = getenv ('REMOTE_ADDR');}
&nbsp;&nbsp;&nbsp;&nbsp;elseif ( getenv ('HTTP_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_FORWARDED_FOR');}
&nbsp;&nbsp;&nbsp;&nbsp;elseif ( getenv ('HTTP_X_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_X_FORWARDED_FOR');}
&nbsp;&nbsp;&nbsp;&nbsp;elseif ( getenv ('HTTP_X_COMING_FROM')) {$user_ip = getenv ('HTTP_X_COMING_FROM');}
&nbsp;&nbsp;&nbsp;&nbsp;elseif ( getenv ('HTTP_VIA')) {$user_ip = getenv ('HTTP_VIA');}
&nbsp;&nbsp;&nbsp;&nbsp;elseif ( getenv ('HTTP_XROXY_CONNECTION')) {$user_ip = getenv ('HTTP_XROXY_CONNECTION');}
&nbsp;&nbsp;&nbsp;&nbsp;elseif ( getenv ('HTTP_CLIENT_IP')) {$user_ip = getenv ('HTTP_CLIENT_IP');}
&nbsp;&nbsp;&nbsp;&nbsp;else {$user_ip='unknown';}
&nbsp;&nbsp;&nbsp;&nbsp;if (15 < strlen ($user_ip)){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ar = split (', ', $user_ip);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ($i= sizeof ($ar)-1; $i> 0; $i--){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($ar[$i]!='' and !preg_match ('/[a-zA-Zа-яА-Я]/', $ar[$i])){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$user_ip = $ar[$i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($i== sizeof ($ar)-1){$user_ip = 'unknown';}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;if ( preg_match ('/[a-zA-Zа-яА-Я]/', $user_ip)){$user_ip = 'unknown';}
&nbsp;&nbsp;&nbsp;&nbsp;return $user_ip;
}
&nbsp;&nbsp;&nbsp;&nbsp;// определим Ip пользователя
$ip_user = ip();
?><!--c2--></div><!--ec2-->

Теперь мы знаем Ip адрес.
Whois сервера слушают клиентов по 43 порту и принимают по нему Ip адреса, а в ответ выдают полную информация об этом Ip адресе.
Для каждого региона предназначен свой собственный Whois сервис, для Европейской части это whois.ripe.net.
Если в базе данных Whois сервера нет информации о Ip адресе, который мы ему выслали по 43 порту, то в его отчёте обязательно будет строка ReferralServer. В этой строке указывается тот сервер, где мы сможем найти информацию о Ip, которого нет у данного Whois сервера. Поэтому создадим функцию whois, которая будет сначала искать строку с реферальным сервером, и, если будет находить, мы будем перезапускать функцию на этот другой сервер. Кроме этого, начинать поиск будет с Главного Whois сервера - whois.arin.net.

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--><?php
&nbsp;&nbsp;&nbsp;&nbsp;// определим Ip пользователя
$ip_user = ip();

&nbsp;&nbsp;&nbsp;&nbsp;// функция по выводу данных об $ip
function whois($server,$ip){
$fp = @fsockopen ($server, 43, &$errno, &$errstr, 30);
if (!$fp){ return false; }
else {
$servers .= $server."<br>\n";
@fputs ($fp, $ip."\r\n");
$text = "";
while ( !feof ($fp)) { $text .= @fgets ($fp, 128)."<br>\n"; }
@fclose ($fp);
$search = "~". preg_quote ("ReferralServer: whois://","~")."([ˆ\n<:]+)~i";
preg_match ($search, $text, $out);
if (! empty ($out[1])) { return whois($out[1], $ip); }
else return $servers.$text;
}
}

&nbsp;&nbsp;&nbsp;&nbsp;// пытаемся извлечь информацию об Ip
$content = whois ( "whois.ripe.net", $ip_user );
&nbsp;&nbsp;&nbsp;&nbsp;// если ничего не вышло
if ($content == ''){
print "Невозможно вывести данные об Ip: $ip_user";
}
else { print $content; }
?><!--c2--></div><!--ec2-->

<b>Скачать скрипт:</b>
You must be registered for see images attach
 
Сверху