<b>Задача</b>: узнать IP адрес пользователя, а затем узнать полную информацию об этом Ip адресе.
Для этого в php предусмотрены функции с Whois - сервером.
Сам по себе Ip адрес представляет из себя набор цифр, для того, чтобы выяснить кому он принадлежит из какой страны и города собственник данного Ip адреса, мы и должны подключиться к Whois - серверу.
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--><?php
// функция по определению ip
function ip(){
if ( getenv ('REMOTE_ADDR')) {$user_ip = getenv ('REMOTE_ADDR');}
elseif ( getenv ('HTTP_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_FORWARDED_FOR');}
elseif ( getenv ('HTTP_X_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_X_FORWARDED_FOR');}
elseif ( getenv ('HTTP_X_COMING_FROM')) {$user_ip = getenv ('HTTP_X_COMING_FROM');}
elseif ( getenv ('HTTP_VIA')) {$user_ip = getenv ('HTTP_VIA');}
elseif ( getenv ('HTTP_XROXY_CONNECTION')) {$user_ip = getenv ('HTTP_XROXY_CONNECTION');}
elseif ( getenv ('HTTP_CLIENT_IP')) {$user_ip = getenv ('HTTP_CLIENT_IP');}
else {$user_ip='unknown';}
if (15 < strlen ($user_ip)){
$ar = split (', ', $user_ip);
for ($i= sizeof ($ar)-1; $i> 0; $i--){
if ($ar[$i]!='' and !preg_match ('/[a-zA-Zа-яА-Я]/', $ar[$i])){
$user_ip = $ar[$i];
break;
}
if ($i== sizeof ($ar)-1){$user_ip = 'unknown';}
}
}
if ( preg_match ('/[a-zA-Zа-яА-Я]/', $user_ip)){$user_ip = 'unknown';}
return $user_ip;
}
// определим 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
// определим Ip пользователя
$ip_user = ip();
// функция по выводу данных об $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;
}
}
// пытаемся извлечь информацию об Ip
$content = whois ( "whois.ripe.net", $ip_user );
// если ничего не вышло
if ($content == ''){
print "Невозможно вывести данные об Ip: $ip_user";
}
else { print $content; }
?><!--c2--></div><!--ec2-->
<b>Скачать скрипт:</b>
Для этого в php предусмотрены функции с Whois - сервером.
Сам по себе Ip адрес представляет из себя набор цифр, для того, чтобы выяснить кому он принадлежит из какой страны и города собственник данного Ip адреса, мы и должны подключиться к Whois - серверу.
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1--><?php
// функция по определению ip
function ip(){
if ( getenv ('REMOTE_ADDR')) {$user_ip = getenv ('REMOTE_ADDR');}
elseif ( getenv ('HTTP_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_FORWARDED_FOR');}
elseif ( getenv ('HTTP_X_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_X_FORWARDED_FOR');}
elseif ( getenv ('HTTP_X_COMING_FROM')) {$user_ip = getenv ('HTTP_X_COMING_FROM');}
elseif ( getenv ('HTTP_VIA')) {$user_ip = getenv ('HTTP_VIA');}
elseif ( getenv ('HTTP_XROXY_CONNECTION')) {$user_ip = getenv ('HTTP_XROXY_CONNECTION');}
elseif ( getenv ('HTTP_CLIENT_IP')) {$user_ip = getenv ('HTTP_CLIENT_IP');}
else {$user_ip='unknown';}
if (15 < strlen ($user_ip)){
$ar = split (', ', $user_ip);
for ($i= sizeof ($ar)-1; $i> 0; $i--){
if ($ar[$i]!='' and !preg_match ('/[a-zA-Zа-яА-Я]/', $ar[$i])){
$user_ip = $ar[$i];
break;
}
if ($i== sizeof ($ar)-1){$user_ip = 'unknown';}
}
}
if ( preg_match ('/[a-zA-Zа-яА-Я]/', $user_ip)){$user_ip = 'unknown';}
return $user_ip;
}
// определим 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
// определим Ip пользователя
$ip_user = ip();
// функция по выводу данных об $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;
}
}
// пытаемся извлечь информацию об Ip
$content = whois ( "whois.ripe.net", $ip_user );
// если ничего не вышло
if ($content == ''){
print "Невозможно вывести данные об Ip: $ip_user";
}
else { print $content; }
?><!--c2--></div><!--ec2-->
<b>Скачать скрипт:</b>
You must be registered for see images attach