{% else-1 %}
нормальное определение реального IP за прокси Opera, UcWeb, Ovi и т.п., где используется сжатие трафика.
Использовать: echo getRealIP();

                        
function getRealIP() {
$result = false;
$proxy_headers = array(
'CLIENT_IP',
'FORWARDED',
'FORWARDED_FOR',
'FORWARDED_FOR_IP',
'HTTP_CLIENT_IP',
'HTTP_FORWARDED',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED_FOR_IP',
'HTTP_PC_REMOTE_ADDR',
'HTTP_PROXY_CONNECTION',
'HTTP_VIA',
'HTTP_X_FORWARDED',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED_FOR_IP',
'HTTP_X_IMFORWARDS',
'HTTP_XROXY_CONNECTION',
'VIA',
'X_FORWARDED',
'X_FORWARDED_FOR'
);

foreach($proxy_headers as $proxy_header) {
if ($result !== false) continue;
if(isset($_SERVER[$proxy_header])) {
preg_match("/d{1,3}.d{1,3}.d{1,3}.d{1,3}/", $_SERVER[$proxy_header],$matches);
if (isset($matches[0])) {
$result = $matches[0];
continue;
}
}
else if(stristr(',', $_SERVER[$proxy_header]) !== FALSE) {
$proxy_header_temp = trim(array_shift(explode(',', $_SERVER[$proxy_header])));
if(($pos_temp = stripos($proxy_header_temp, ':')) !== FALSE) $proxy_header_temp = substr($proxy_header_temp, 0, $pos_temp);
if(preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $proxy_header_temp)){
$result = $_SERVER[$proxy_header];
continue;
}
}
}

if ($result === false){
$result = $_SERVER['REMOTE_ADDR'];
}
if (preg_match("#([0-9]+.).*#", $result, $m)){
if ($m[1] == "10." || $m[1] == "100."){
$result = $_SERVER['REMOTE_ADDR'];
}
}
if (preg_match("#([0-9]+.[0-9]+.).*#", $result, $m)){
if ($m[1] == "192.168."){
$result = $_SERVER['REMOTE_ADDR'];
}
}
return $result;
};
2 1971 0
1

Фотография
Victor * Верифицирован 41.37
• 6 сен 2024, 13:25


Mobiaaa прав

1

Нет фото
Mobiaaa * Верифицирован 2.73
• 17 июл 2016, 18:18


Конечно не понял *
Даже готов поспорить на сумму с пару нулями, что этот код откроет возможность подменивать IP *

0

Нет фото
Randy * 0.23
• 17 июл 2016, 17:49


Mobiaaa, Ты в коде не понял видимо ничего. Доказывать или обяснять код не буду, для чего он.

0

Нет фото
Mobiaaa * Верифицирован 2.73
• 17 июл 2016, 14:26


реальный IP только в REMOTE_ADDR
А то, что в этом куске кода прописано, передаётся в заголовках
В заголовках можно передать всё, что душе угодно
Хоть PROFIWM=1
И будет у Вас в $_SERVER['HTTP_PROFIWM'] = 1
Вот все выше перечисленные индексы переменных получают из заголовков веб сервера
Все они были "придуманы" и нигде не значатся как "стандарт"

0

Нет фото
Randy * 0.23
• 17 июл 2016, 02:14


Mobiaaa, реальный IP? Наивиный *