PHP

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

Задача: узнать Ip адрес пользователя, а затем узнать полную информацию об этом Ip адресе. Для этого в php предусмотрены функции с Whois - сервером. Сам по себе Ip адрес представляет из себя набор цифр, для того, чтобы выяснить кому он принадлежит из какой страны и города собственник данного Ip адреса, мы и должны подключиться к Whois - серверу. Но, для начала определим Ip адрес пользователя. Ваш Ip адрес: 46.247.241.197.

<?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(); 

print $ip_user;
?>

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

<?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();

    // функция по выводу данных об $ip
function whois($server, $ip){
$servers = '';
$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; }
?>


В выводе этой функции будут все Whois сервера, к которым было осуществлено подключение, в случае, если будет реферальное переподключение.
Теги:
Ip адрес
Добавлено: 27 Апреля 2018 06:18:37 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...