Определение IP отправителя

Discussion in 'PHP' started by Qwazar, 19 Dec 2008.

  1. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Иногда натыкаюсь на подобные фугкции определения IP:
    Code:
    	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 может быть неустановлен?
     
    4 people like this.
  2. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    исправь
    $_SERVER['REMOTE_ADDR']
    и тд.
     
  3. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Каждая переменная как может быть установлена, так может быть и не установлена. Устанавливать её или нет определяет ПО на базе которого работает прокси-сервер, через который идёт запрос. Анонимные прокси не устанавливают значения других переменных, устанавливают только значение REMOTE_ADDR в свой адрес. Не анонимные проксики могут устанавливать все переменные, что свидетельствует о том, что запрос был послан через промежуточные прокси-сервера.
     
  4. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Это всё ясно, меня конкретно инетерсует, в каких случаях (на каких конкретно серверах\системах), переменная окружения "HTTP_CLIENT_IP" будет неустановленной.
     
  5. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Qwazar, ну пойми - это определяется настройками, где будет "настроено" устанавливать эту переменную там и будет она установлена. Просто полагаться всецело на значение этой переменной нельзя, что и делает скрипт - проверяет задана эта переменная или нет и использует её значение или нет.
     
    2 people like this.
  6. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Ок, ясно, в принципе на всех основных серверах она установлена по дефолту, но в принципе её можно и отключить. Как я понял.
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Qwazar Как раз наоборот, заголовок HTTP_CLIENT_IP обычно не устанавливается. И следует помнить, что все заголовки HTTP_* можно подделать и использовать их для попытки найти реальный IP не следует.
     
    _________________________
    1 person likes this.
  8. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Немного не в тему, но скажу что такие функции нужны, не знаю сколько на данный момент таких хостингов, но я 2 года назад сидел на одном хосте, где IP пользователя лежал в HTTP_X_FORWARDED_FOR, а REMOTE_ADDR был пуст...вот такие кривые настройки порой бывают)
     
  9. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    настоящий ip адрес находится в переменной $_SERVER['REMOTE_ADDR'] а все остальные вариации можно подделать отправкой левых заголовков. Читал в какой-то статье.
     
  10. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Всё зависит от настроек сервера