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


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



Как узнать настоящий 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-2017, НО "Хендмейд Своими руками!" Правила использования.