Загружается ...


Поиск по сайту



Как узнать настоящий REMOTE_ADDR

Автор: Grant Burton
Разделы: интернет
Добавлено: 2008-12-21

REMOTE_ADDR и X_FORWARDED_FOR  Проблема определения реального ip-адреса пользователя достаточно распространена и многие популярные движки (например, Wordpress) некорректно определяют удалённый ip-адрес по умолчанию.

 Две простых функции помогут вам разобраться с какого адреса действительно пришел к вам пользователь. Решение этой проблемы заключается в подстановке корректного адреса в переменную $_SERVER["REMOTE_ADDR"] (в понятиях PHP, на котором написан WordPress). Корректный адрес может быть в таких серверных переменных:

  • REMOTE_ADDR
  • HTTP_X_FORWARDED_FOR
  • X_REAL_IP
  • HTTP_FORWARDED

и некоторых других.

Для определения удаленного адреса мы воспользуемся autoprepepend-скриптом, т.е -файлом, который добавляется и исполняется перед каждым вашим php-скриптом. Скрипт (автор Grant Burton), кладем в любое место сайта.

autoprepend.inc.php:

/* By Grant Burton @ BURTONTECH.COM (11-30-2008): IP-Proxy-Cluster Fix */
function checkIP($ip) {
if (!empty($ip) && ip2long($ip)!=-1 && ip2long($ip)!=false) {
$private_ips = array (
array('0.0.0.0','2.255.255.255'),
array('10.0.0.0','10.255.255.255'),
array('127.0.0.0','127.255.255.255'),
array('169.254.0.0','169.254.255.255'),
array('172.16.0.0','172.31.255.255'),
array('192.0.2.0','192.0.2.255'),
array('192.168.0.0','192.168.255.255'),
array('255.255.255.0','255.255.255.255')
);
 
foreach ($private_ips as $r) {
$min = ip2long($r[0]);
$max = ip2long($r[1]);
if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
}
return true;
} else {
return false;
}
}
function determineIP() {
if (checkIP($_SERVER["HTTP_CLIENT_IP"])) {
return $_SERVER["HTTP_CLIENT_IP"];
}
foreach (explode(",",$_SERVER["HTTP_X_FORWARDED_FOR"]) as $ip) {
if (checkIP(trim($ip))) {
return $ip;
}
}
if (checkIP($_SERVER["HTTP_X_FORWARDED"])) {
return $_SERVER["HTTP_X_FORWARDED"];
} elseif (checkIP($_SERVER["HTTP_X_CLUSTER_CLIENT_IP"])) {
return $_SERVER["HTTP_X_CLUSTER_CLIENT_IP"];
} elseif (checkIP($_SERVER["HTTP_FORWARDED_FOR"])) {
return $_SERVER["HTTP_FORWARDED_FOR"];
} elseif (checkIP($_SERVER["HTTP_FORWARDED"])) {
return $_SERVER["HTTP_FORWARDED"];
} else {
return $_SERVER["REMOTE_ADDR"];
}
}
//Override server variable for Wordpress comments
$_SERVER["REMOTE_ADDR"] = determineIP();

 

 Теперь вы можете инклудить полученный файл из ваших скриптов, а можете отредактировать .htaccess в корне вашего сайта, добавив в него ссылку на этот скрипт c помощью такой команды (не забыв скорректировать пути):

php_value auto_prepend_file /home/username/htdocs/autoprepend.inc.php


Как узнать настоящий REMOTE_ADDR своими руками


 




Новые комментарии:
 

Знаете ли вы ?
Вопросы хендмейд своими руками
 
Написать нам письмо!


 
Определение расстояний
Беременность и роды
Штормовка
Плот из брёвен
Уход за кожей
Этикет за столом
Палатка
Сухая кожа лица
Определение ширины реки
Цветочные часы
Костры
Первая помощь
Сухие волосы
Развиваем глазомер
Бахилы для активного отдыха
Траволечение для почек
Полюса северного полушария
Идеи присылайте на idei [u] handworker.ru. Контакт для связи +7 (923) 2Ч5Ч757
© 2007-2020, НО "Хендмейд Своими руками!" Правила использования.