[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Определение ip адреса посетителя сайта
Гость_Алексей
Здравствуйте!
Столкнулся с проблей определения IP адреса посетителя сайта!
Использую и стандартную переменную $_SERVER['REMOTE_ADDR'] и всякие куски кода из интернета, типа таких вот:

 function get_ip(){
$alt_ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_CLIENT_IP'])){
$alt_ip = $_SERVER['HTTP_CLIENT_IP'];
}
else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)){
// make sure we dont pick up an internal IP defined by RFC1918
foreach ($matches[0] AS $ip){
if (!preg_match("#^(10|172\.16|192\.168)\.#", $ip)){
$alt_ip = $ip;
break;
}
}
}

else if (isset($_SERVER['HTTP_FROM'])){
$alt_ip = $_SERVER['HTTP_FROM'];
}
return $alt_ip;
}


function getRealIpAddr()
{
if(!empty($_SERVER['HTTP_CLIENT_IP'])) return $_SERVER['HTTP_CLIENT_IP'];
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) return $_SERVER['HTTP_X_FORWARDED_FOR'];
else return $_SERVER['REMOTE_ADDR'];
}


echo '<br><br>';
echo get_ip().'<br><br>';
echo getRealIpAddr().'<br><br>';






Спустя 1 минута, 18 секунд (6.01.2012 - 23:36) Игорь_Vasinsky написал(а):
Цитата
дравствуйте!
Столкнулся с проблей определения IP адреса посетителя сайта!
Использую и стандартную переменную $_SERVER['REMOTE_ADDR'] и всякие куски кода из интернета, типа таких вот:



об чё споткнулся то???? и чё вообще это за муть?

Спустя 2 минуты, 12 секунд (6.01.2012 - 23:38) Гость_Алексей написал(а):
И всё время выдаёт мне адрес типа такого 192.168.1.3

Я так понимаю это адрес прокси-сервера...
На сайт заходит куча народу, через формы обратной связи отправляют сообщения, а на всех идёт один и тот же адрес 192.168.1.3....это же бред.....
Подскажите пожалуйста, в чём проблема и как с ней бороться?

P.S. как-то неудачно нажал на кнопку создания темы, потому и дописываю вторым сообщением саму проблему)

Спустя 43 секунды (6.01.2012 - 23:39) Гость_Алексей написал(а):
Игорь_Vasinsky....???

Спустя 2 минуты, 45 секунд (6.01.2012 - 23:42) Игорь_Vasinsky написал(а):
так ты чё глумишся то??

просто не можешь

$_SERVER['REMOTE_ADDR'];

Спустя 1 минута, 51 секунда (6.01.2012 - 23:44) Гость_Алексей написал(а):
Извините, Игорь_Vasinsky, я не глумлюсь и ваш юмор тоже не понимаю...

Спустя 1 минута, 42 секунды (6.01.2012 - 23:45) Игорь_Vasinsky написал(а):
что делает твой кусок чуда кода?

Спустя 3 минуты, 22 секунды (6.01.2012 - 23:49) inpost написал(а):
$_SERVER['REMOTE_ADDR']; и только его.

Спустя 43 секунды (6.01.2012 - 23:50) Гость_Алексей написал(а):
Я просто говорю, что мне нужно определить IP адрес посетителя сайта.
Через вот такую штуку оно не работает:
$_SERVER['REMOTE_ADDR'];


Я стал искать решение проблемы на разных форумах, люди предлагали различные варианты, 2 таких варианта я тут в коде привёл, они у меня тоже не работают, а точнее они выдают такой же результат что и:
$_SERVER['REMOTE_ADDR'];


Потому я и решил обратиться сюда с таким вопросом.

Спустя 3 минуты, 34 секунды (6.01.2012 - 23:53) inpost написал(а):
Это подделка IP адресов. Особенно через прокси популярно.
Данный IP выдаёт сервер, остальные IP подделываются самим юзером.

IP нужен для статистики и только, на него нельзя полагаться АБСОЛЮТНО нигде.

Спустя 1 минута, 3 секунды (6.01.2012 - 23:54) Игорь_Vasinsky написал(а):
Цитата
Цитата
Через вот такую штуку оно не работает:
$_SERVER['REMOTE_ADDR'];




ого.. надо в PHP позвонить..сказать что заплатку выпускали.

Ты знаешь чта штука делает??? в ней храниться IP адрес твоего посетителя, значит твои гости через один прокси или с одного IP к тебе лезут.. ты не на локалке? а может это накрутка и флуд?

Спустя 2 минуты, 23 секунды (6.01.2012 - 23:57) Nikitian написал(а):
Попробуйте эту ещё функцию:
Свернутый текст

//Возвращает IP посетителя
function get_ip()
{
global $REMOTE_ADDR;
global $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED;
global $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM;
global $HTTP_SERVER_VARS, $HTTP_ENV_VARS;
// Get some server/environment variables values
if(empty($REMOTE_ADDR))
{
if(!empty($_SERVER)&&isset($_SERVER['REMOTE_ADDR']))
{
$REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
}
elseif(!empty($_ENV)&&isset($_ENV['REMOTE_ADDR']))
{
$REMOTE_ADDR = $_ENV['REMOTE_ADDR'];
}
elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['REMOTE_ADDR']))
{
$REMOTE_ADDR = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
elseif(!empty($HTTP_ENV_VARS)&&isset($HTTP_ENV_VARS['REMOTE_ADDR']))
{
$REMOTE_ADDR = $HTTP_ENV_VARS['REMOTE_ADDR'];
}
elseif(@getenv('REMOTE_ADDR'))
{
$REMOTE_ADDR = getenv('REMOTE_ADDR');
}
}
// end if
if(empty($HTTP_X_FORWARDED_FOR))
{
if(!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif(!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED_FOR']))
{
$HTTP_X_FORWARDED_FOR = $_ENV['HTTP_X_FORWARDED_FOR'];
}
elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR']))
{
$HTTP_X_FORWARDED_FOR = $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];
}
elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_FORWARDED_FOR']))
{
$HTTP_X_FORWARDED_FOR = $HTTP_ENV_VARS['HTTP_X_FORWARDED_FOR'];
}
elseif(@getenv('HTTP_X_FORWARDED_FOR'))
{
$HTTP_X_FORWARDED_FOR = getenv('HTTP_X_FORWARDED_FOR');
}
}
// end if
if(empty($HTTP_X_FORWARDED))
{
if(!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED']))
{
$HTTP_X_FORWARDED = $_SERVER['HTTP_X_FORWARDED'];
}
elseif(!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED']))
{
$HTTP_X_FORWARDED = $_ENV['HTTP_X_FORWARDED'];
}
elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED']))
{
$HTTP_X_FORWARDED = $HTTP_SERVER_VARS['HTTP_X_FORWARDED'];
}
elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_FORWARDED']))
{
$HTTP_X_FORWARDED = $HTTP_ENV_VARS['HTTP_X_FORWARDED'];
}
elseif(@getenv('HTTP_X_FORWARDED'))
{
$HTTP_X_FORWARDED = getenv('HTTP_X_FORWARDED');
}
}
// end if
if(empty($HTTP_FORWARDED_FOR))
{
if(!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED_FOR']))
{
$HTTP_FORWARDED_FOR = $_SERVER['HTTP_FORWARDED_FOR'];
}
elseif(!empty($_ENV) && isset($_ENV['HTTP_FORWARDED_FOR']))
{
$HTTP_FORWARDED_FOR = $_ENV['HTTP_FORWARDED_FOR'];
}
elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_FORWARDED_FOR']))
{
$HTTP_FORWARDED_FOR = $HTTP_SERVER_VARS['HTTP_FORWARDED_FOR'];
}
elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_FORWARDED_FOR']))
{
$HTTP_FORWARDED_FOR = $HTTP_ENV_VARS['HTTP_FORWARDED_FOR'];
}
elseif(@getenv('HTTP_FORWARDED_FOR'))
{
$HTTP_FORWARDED_FOR = getenv('HTTP_FORWARDED_FOR');
}
}
// end if
if(empty($HTTP_FORWARDED))
{
if(!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED']))
{
$HTTP_FORWARDED = $_SERVER['HTTP_FORWARDED'];
}
elseif(!empty($_ENV) && isset($_ENV['HTTP_FORWARDED']))
{
$HTTP_FORWARDED = $_ENV['HTTP_FORWARDED'];
}
elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_FORWARDED']))
{
$HTTP_FORWARDED = $HTTP_SERVER_VARS['HTTP_FORWARDED'];
}
elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_FORWARDED']))
{
$HTTP_FORWARDED = $HTTP_ENV_VARS['HTTP_FORWARDED'];
}
elseif(@getenv('HTTP_FORWARDED'))
{
$HTTP_FORWARDED = getenv('HTTP_FORWARDED');
}
}
// end if
if(empty($HTTP_VIA))
{
if(!empty($_SERVER) && isset($_SERVER['HTTP_VIA']))
{
$HTTP_VIA = $_SERVER['HTTP_VIA'];
}
elseif(!empty($_ENV) && isset($_ENV['HTTP_VIA']))
{
$HTTP_VIA = $_ENV['HTTP_VIA'];
}
elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_VIA']))
{
$HTTP_VIA = $HTTP_SERVER_VARS['HTTP_VIA'];
}
elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_VIA']))
{
$HTTP_VIA = $HTTP_ENV_VARS['HTTP_VIA'];
}
elseif(@getenv('HTTP_VIA'))
{
$HTTP_VIA = getenv('HTTP_VIA');
}
}
// end if
if(empty($HTTP_X_COMING_FROM))
{
if(!empty($_SERVER) && isset($_SERVER['HTTP_X_COMING_FROM']))
{
$HTTP_X_COMING_FROM = $_SERVER['HTTP_X_COMING_FROM'];
}
elseif(!empty($_ENV) && isset($_ENV['HTTP_X_COMING_FROM']))
{
$HTTP_X_COMING_FROM = $_ENV['HTTP_X_COMING_FROM'];
}
elseif(!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_COMING_FROM']))
{
$HTTP_X_COMING_FROM = $HTTP_SERVER_VARS['HTTP_X_COMING_FROM'];
}
elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_COMING_FROM']))
{
$HTTP_X_COMING_FROM = $HTTP_ENV_VARS['HTTP_X_COMING_FROM'];
}
elseif(@getenv('HTTP_X_COMING_FROM'))
{
$HTTP_X_COMING_FROM = getenv('HTTP_X_COMING_FROM');
}
}
// end if
if(empty($HTTP_COMING_FROM))
{
if(!empty($_SERVER) && isset($_SERVER['HTTP_COMING_FROM']))
{
$HTTP_COMING_FROM = $_SERVER['HTTP_COMING_FROM'];
}
elseif(!empty($_ENV) && isset($_ENV['HTTP_COMING_FROM']))
{
$HTTP_COMING_FROM = $_ENV['HTTP_COMING_FROM'];
}
elseif(!empty($HTTP_COMING_FROM) && isset($HTTP_SERVER_VARS['HTTP_COMING_FROM']))
{
$HTTP_COMING_FROM = $HTTP_SERVER_VARS['HTTP_COMING_FROM'];
}
elseif(!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_COMING_FROM']))
{
$HTTP_COMING_FROM = $HTTP_ENV_VARS['HTTP_COMING_FROM'];
}
elseif(@getenv('HTTP_COMING_FROM'))
{
$HTTP_COMING_FROM = getenv('HTTP_COMING_FROM');
}
}
// end if
// Gets the default ip sent by the user

if(!empty($REMOTE_ADDR))
{
$direct_ip = $REMOTE_ADDR;
}
// Gets the proxy ip sent by the user
$proxy_ip='';
if(!empty($HTTP_X_FORWARDED_FOR))$proxy_ip = $HTTP_X_FORWARDED_FOR;
elseif(!empty($HTTP_X_FORWARDED))$proxy_ip = $HTTP_X_FORWARDED;
elseif(!empty($HTTP_FORWARDED_FOR))$proxy_ip = $HTTP_FORWARDED_FOR;
elseif(!empty($HTTP_FORWARDED))$proxy_ip = $HTTP_FORWARDED;
elseif(!empty($HTTP_VIA))$proxy_ip = $HTTP_VIA;
elseif(!empty($HTTP_X_COMING_FROM))$proxy_ip = $HTTP_X_COMING_FROM;
elseif(!empty($HTTP_COMING_FROM))$proxy_ip = $HTTP_COMING_FROM;
// Returns the true IP if it has been found, else FALSE
if (empty($proxy_ip))
{
// True IP without proxy
return $direct_ip;
}
else
{
$is_ip = ereg('^([0-9]{1,3}\.){3,3}[0-9]{1,3}', $proxy_ip, $regs);
if($is_ip && (count($regs) > 0))
{
// True IP behind a proxy
return $regs[0];
}
else
{
// Can't define IP: there is a proxy but we don't have
// information about the true IP

return FALSE;
}
}
// end if... else...
}

В $_SERVER['REMOTE_ADDR']; может быть локальный адрес, если его транслирует прокси-сервер фронтенда, например nginx перед апачем.

Спустя 56 секунд (6.01.2012 - 23:57) Семён написал(а):
nginx-а скорее всего ip выдаёт.

Спустя 7 минут, 20 секунд (7.01.2012 - 00:05) Гость_Алексей написал(а):
Nikitian, спасибо, но результат тот же)
Вообще моей задачей была только реализация сайта, а где его там дальше размещали и как я точно не знаю, но частично выяснил, что на сервере есть виртуалка и они сайт запихнули на неё)))
Может всё из-за этого?))

Спустя 7 минут (7.01.2012 - 00:12) Invis1ble написал(а):
Гость_Алексей
причина в настройках сервера

Спустя 13 минут, 33 секунды (7.01.2012 - 00:25) inpost написал(а):
Гость_Алексей
Ну так с этого и надо было начинать. Виртуалка получает переадресацию от сервера и виртуалка будят являться прокси-сервером, поэтому ip получить вообще будет невозможно.

Спустя 4 минуты, 7 секунд (7.01.2012 - 00:29) killer8080 написал(а):
Гость_Алексей
если в $_SERVER['REMOTE_ADDR'] всегда один и тот же IP, то нужно админам руки поотбивать, чтоб стали прямее biggrin.gif
Тромби сапорт, пускай прикрутят mod_rpaf к апачу, и настроят nginx как положено.

Спустя 7 минут, 6 секунд (7.01.2012 - 00:37) inpost написал(а):
killer8080
То есть это можно на виртуальной машине сделать тоже? Или ты говоришь, чтобы он установил сайт не на виртуалке, а на прямую?

Спустя 10 минут, 45 секунд (7.01.2012 - 00:47) killer8080 написал(а):
inpost
Апач хорош для скриптов, но медленно отдает статику. Поэтому, для повышения производительности, хостеры ставят связку nginx+apache. Nginx стоит фронтендом и отдаёт все статику, а запросы к скриптам проксирует на апач. Потому апач физически не может знать IP клиента. Чтоб избавиться от этого бага, nginx настраивают так, чтоб он передавал IP через http заголовок X-Forwarded-For или X-Real-Ip
На апач соответственно, прикручивают модуль который переназначает переменную REMOTE_ADDR

У ТС очевидно именно эта ситуация, попались админы с кривыми руками smile.gif

Спустя 7 минут, 33 секунды (7.01.2012 - 00:55) inpost написал(а):
killer8080
У меня стоит виртуальная машина, на ней фриБСД, с интернета обращаются на мой IP, а я сделал в виндовсе переадресацию 80-ого порта на виртуалку. Я так понимаю, в моём случае IP проставляет мой виндовс? Виндовс голый, идёт переадресация, при этом проставляется внутренний IP.

Спустя 1 час, 35 минут, 45 секунд (7.01.2012 - 02:31) YVSIK написал(а):
самое время вот это прочитать чтоб было все ясно
эта статейка о многом может поведать)) ph34r.gif

Спустя 27 минут, 47 секунд (7.01.2012 - 02:58) VELIK505 написал(а):
Цитата (Гость_Алексей @ 6.01.2012 - 21:05)
Nikitian, спасибо, но результат тот же)
Вообще моей задачей была только реализация сайта, а где его там дальше размещали и как я точно не знаю, но частично выяснил, что на сервере есть виртуалка и они сайт запихнули на неё)))
Может всё из-за этого?))

mod_rpaf2 поставь на сервер и подключи его в httpd.conf или так и будет выдавать 1айпи (скорее всего айпи сервера)

Спустя 15 часов, 28 минут, 24 секунды (7.01.2012 - 18:27) killer8080 написал(а):
Цитата (inpost @ 6.01.2012 - 23:55)
killer8080
У меня стоит виртуальная машина, на ней фриБСД, с интернета обращаются на мой IP, а я сделал в виндовсе переадресацию 80-ого порта на виртуалку. Я так понимаю, в моём случае IP проставляет мой виндовс? Виндовс голый, идёт переадресация, при этом проставляется внутренний IP.

У тебя порт маппинг, а не проксирование. Вряд ли у ТС такой экзотический хостинг smile.gif
Скорей всего криво настроенная VPS-ка.

Спустя 1 день, 19 часов, 43 минуты, 33 секунды (9.01.2012 - 14:10) Гость_Алексей написал(а):
Были проблемы с интернетом, потому зайти смог только сейчас.
Ребят, всем большое спасибо за советы!!
Попробую как посоветовал VELIK505.
Статья, которую дал YVSIK, весьма интересная)
Еще раз спасибо всем smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.