Как узнать 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, ну и куки для верности.

3 Комментариев на «Как узнать ip»
Молодец! Для новичков всё расписал по полочкам.
А как тебе вот это?
//Получение реального 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();
Ответить
makecode Ответил:
Май 1st, 2011 at 11:10
Функция просто перебирает источники IP адресов, если все заголовки пусты в итоге все равно берет REMOTE_ADDR.
Ответить
Ответил:
Август 2nd, 2011 at 20:30
И таки зря она его перебирает.Заголовки легко подделываются.
Ответить