Столкнулся с проблей определения 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. как-то неудачно нажал на кнопку создания темы, потому и дописываю вторым сообщением саму проблему)
Я так понимаю это адрес прокси-сервера...
На сайт заходит куча народу, через формы обратной связи отправляют сообщения, а на всех идёт один и тот же адрес 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 адрес посетителя сайта.
Через вот такую штуку оно не работает:
Я стал искать решение проблемы на разных форумах, люди предлагали различные варианты, 2 таких варианта я тут в коде привёл, они у меня тоже не работают, а точнее они выдают такой же результат что и:
Потому я и решил обратиться сюда с таким вопросом.
Через вот такую штуку оно не работает:
$_SERVER['REMOTE_ADDR'];
Я стал искать решение проблемы на разных форумах, люди предлагали различные варианты, 2 таких варианта я тут в коде привёл, они у меня тоже не работают, а точнее они выдают такой же результат что и:
$_SERVER['REMOTE_ADDR'];
Потому я и решил обратиться сюда с таким вопросом.
Спустя 3 минуты, 34 секунды (6.01.2012 - 23:53) inpost написал(а):
Это подделка IP адресов. Особенно через прокси популярно.
Данный IP выдаёт сервер, остальные IP подделываются самим юзером.
IP нужен для статистики и только, на него нельзя полагаться АБСОЛЮТНО нигде.
Данный IP выдаёт сервер, остальные IP подделываются самим юзером.
IP нужен для статистики и только, на него нельзя полагаться АБСОЛЮТНО нигде.
Спустя 1 минута, 3 секунды (6.01.2012 - 23:54) Игорь_Vasinsky написал(а):
Цитата | ||
|
ого.. надо в PHP позвонить..сказать что заплатку выпускали.
Ты знаешь чта штука делает??? в ней храниться IP адрес твоего посетителя, значит твои гости через один прокси или с одного IP к тебе лезут.. ты не на локалке? а может это накрутка и флуд?
Спустя 2 минуты, 23 секунды (6.01.2012 - 23:57) Nikitian написал(а):
Попробуйте эту ещё функцию:
В $_SERVER['REMOTE_ADDR']; может быть локальный адрес, если его транслирует прокси-сервер фронтенда, например nginx перед апачем.
Свернутый текст
//Возвращает 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 получить вообще будет невозможно.
Ну так с этого и надо было начинать. Виртуалка получает переадресацию от сервера и виртуалка будят являться прокси-сервером, поэтому ip получить вообще будет невозможно.
Спустя 4 минуты, 7 секунд (7.01.2012 - 00:29) killer8080 написал(а):
Гость_Алексей
если в $_SERVER['REMOTE_ADDR'] всегда один и тот же IP, то нужно админам руки поотбивать, чтоб стали прямее
Тромби сапорт, пускай прикрутят mod_rpaf к апачу, и настроят nginx как положено.
если в $_SERVER['REMOTE_ADDR'] всегда один и тот же IP, то нужно админам руки поотбивать, чтоб стали прямее

Тромби сапорт, пускай прикрутят 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
У ТС очевидно именно эта ситуация, попались админы с кривыми руками
Апач хорош для скриптов, но медленно отдает статику. Поэтому, для повышения производительности, хостеры ставят связку nginx+apache. Nginx стоит фронтендом и отдаёт все статику, а запросы к скриптам проксирует на апач. Потому апач физически не может знать IP клиента. Чтоб избавиться от этого бага, nginx настраивают так, чтоб он передавал IP через http заголовок X-Forwarded-For или X-Real-Ip
На апач соответственно, прикручивают модуль который переназначает переменную REMOTE_ADDR
У ТС очевидно именно эта ситуация, попались админы с кривыми руками

Спустя 7 минут, 33 секунды (7.01.2012 - 00:55) inpost написал(а):
killer8080
У меня стоит виртуальная машина, на ней фриБСД, с интернета обращаются на мой IP, а я сделал в виндовсе переадресацию 80-ого порта на виртуалку. Я так понимаю, в моём случае IP проставляет мой виндовс? Виндовс голый, идёт переадресация, при этом проставляется внутренний IP.
У меня стоит виртуальная машина, на ней фриБСД, с интернета обращаются на мой IP, а я сделал в виндовсе переадресацию 80-ого порта на виртуалку. Я так понимаю, в моём случае IP проставляет мой виндовс? Виндовс голый, идёт переадресация, при этом проставляется внутренний IP.
Спустя 1 час, 35 минут, 45 секунд (7.01.2012 - 02:31) YVSIK написал(а):
Спустя 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. |
У тебя порт маппинг, а не проксирование. Вряд ли у ТС такой экзотический хостинг

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