PDA

Просмотр полной версии : Определение IP отправителя


Qwazar
19.12.2008, 17:55
Иногда натыкаюсь на подобные фугкции определения IP:
if ($cip = getenv("HTTP_CLIENT_IP"))
$ip = $cip;
elseif ($cip = getenv("HTTP_X_FORWARDED_FOR"))
$ip = $cip;
elseif ($cip = getenv("REMOTE_ADDR"))
$ip = $cip;
else $ip = "UNKNOWN";


Вопрос: Зачем делать именно так? В каких случаях HTTP_CLIENT_IP может быть неустановлен?

b3
19.12.2008, 17:59
исправь
$_SERVER['REMOTE_ADDR']
и тд.

groundhog
19.12.2008, 18:01
Каждая переменная как может быть установлена, так может быть и не установлена. Устанавливать её или нет определяет ПО на базе которого работает прокси-сервер, через который идёт запрос. Анонимные прокси не устанавливают значения других переменных, устанавливают только значение REMOTE_ADDR в свой адрес. Не анонимные проксики могут устанавливать все переменные, что свидетельствует о том, что запрос был послан через промежуточные прокси-сервера.

Qwazar
19.12.2008, 18:02
Это всё ясно, меня конкретно инетерсует, в каких случаях (на каких конкретно серверах\системах), переменная окружения "HTTP_CLIENT_IP" будет неустановленной.

groundhog
19.12.2008, 18:04
Qwazar, ну пойми - это определяется настройками, где будет "настроено" устанавливать эту переменную там и будет она установлена. Просто полагаться всецело на значение этой переменной нельзя, что и делает скрипт - проверяет задана эта переменная или нет и использует её значение или нет.

Qwazar
19.12.2008, 18:07
Ок, ясно, в принципе на всех основных серверах она установлена по дефолту, но в принципе её можно и отключить. Как я понял.

Gifts
19.12.2008, 23:31
Qwazar Как раз наоборот, заголовок HTTP_CLIENT_IP обычно не устанавливается. И следует помнить, что все заголовки HTTP_* можно подделать и использовать их для попытки найти реальный IP не следует.

.:EnoT:.
20.12.2008, 00:01
Немного не в тему, но скажу что такие функции нужны, не знаю сколько на данный момент таких хостингов, но я 2 года назад сидел на одном хосте, где IP пользователя лежал в HTTP_X_FORWARDED_FOR, а REMOTE_ADDR был пуст...вот такие кривые настройки порой бывают)

ntldr
20.12.2008, 08:10
настоящий ip адрес находится в переменной $_SERVER['REMOTE_ADDR'] а все остальные вариации можно подделать отправкой левых заголовков. Читал в какой-то статье.

.:EnoT:.
20.12.2008, 11:54
Всё зависит от настроек сервера