Как узнать ip

Часто может понадобится способ определения ip адреса пользователя. Но тут все не так просто как кажется на первый взгляд. Например пользователь может ходить через прокси-сервер, а в некоторых случаях, если вы боретесь со спамом заголовки, в том числе и ip можно подделать. Разберемся что к чему.

Для начала введение в некоторые PHP функции:

HTTP_USER_AGENT - функция определяет браузер пользователя и операционную систему.
HTTP_HOST - доменное имя сервера на котором запущен скрипт.
SERVER_PORT - порт сервера, по-умолчанию 80.
REMOTE_ADDR - содержит ip адрес пользователя, часто сюда вставляется ip прокси.
HTTP_CLIENT_IP - содержит ip пользователя, но берется из getenv() и исключая прокси.
REMOTE_PORT - порт соединения браузера с сервером.
HTTP_X_FORWARDED_FOR - если пустое значение значит прокси не используется.

HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR очень легко подделать, т.к. это заголовки, вообще все что начинается на HTTP это http заголовки и их можно подделать. А вот REMOTE_ADDR подделать нельзя.

Поэтому для определения ip адреса стоит его и использовать.

Т.е. если исключить вариант подделки адресов, то получится что если HTTP_X_FORWARDED_FOR пустая переменная, то настоящий ip адрес клиента REMOTE_ADDR, а если не пустая то HTTP_X_FORWARDED_FOR содержит ip адрес клиента, а REMOTE_ADDR проксю.

Ну и в конце концов если вам нужно определение ip для бана спамеров или пользователей, используйте именно REMOTE_ADDR, ну и куки для верности.

Понравился пост? Подпишитесь на RSS ленту или Twitter.
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (8 votes, average: 5,00 из 5)
Loading ... Loading ...
Теги: ,

Похожие записи

3 Комментариев на «Как узнать ip»

  • Джус
    1 Май, 2011, 6:27

    Молодец! Для новичков всё расписал по полочкам.
    А как тебе вот это?

    //Получение реального IP-адреса пользователя
    function GetRealIp()
    {
    if (!empty($_SERVER['HTTP_CLIENT_IP']))
    {
    $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    {
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
    $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
    }
    $CLIENT_IP = GetRealIp();

    Thumb up 2 Thumb down 0

    Ответить

    makecode Ответил:

    Функция просто перебирает источники IP адресов, если все заголовки пусты в итоге все равно берет REMOTE_ADDR.

    Thumb up 2 Thumb down 0

    Ответить

    Костя Ответил:

    И таки зря она его перебирает.Заголовки легко подделываются.

    Thumb up 1 Thumb down 0

    Ответить

Оставить комментарий