2011-01-04 4 views
1

Я использовал $ _SERVER ['REMOTE_ADDR'] и возвращает IP-адрес клиента (IP-адрес, с которого пользователь просматривает текущую страницу), но теперь (и тот же код) он возвращает host ip address (я проверил ip-адрес с IP-адресом). проблема с хозяином или что? спасибо u.

+6

Вы бы не посетили его у своего хозяина по совпадению? – TJHeuvel

+0

Вы используете какой-то прокси? – Gumbo

+0

нет. я проверил несколько раз. Я не использую прокси – imez

ответ

12

Сначала вы должны запросить HTTP_X_FORWARDED_FOR, и если не назначен, используйте REMOTE_ADDR.

+0

Теперь я использую HTTP_X_FORWARDED_FOR и возвращает правильный ip. но почему проблема с REMOTE_ADDR? – imez

+0

Поскольку между вами и сервером есть прокси-сервер, вы получаете адрес прокси-сервера как REMOTE_ADDR. HTTP_X_FORWARDED_FOR - это IP-адрес клиента, использующий прокси-сервер. –

+0

@imez: Поскольку @Rosh уже указал, что между вами и сервером должен быть прокси-сервер, и если вы запросите 'REMOTE_ADDR', вы получите IP-адрес прокси-сервера. Если вы сначала проверите «HTTP_X_FORWARDED_FOR», то много раз прокси-сервер заполнит его «реальным» IP-адресом. – James

2

Я должен отметить, что массив ключей чувствителен к регистру, и должны быть в верхнем регистре:

var_dump($_SERVER['remote_addr']); 
echo "\n"; 
var_dump($_SERVER['REMOTE_ADDR']); 

Выход:

Notice: Undefined index: remote_addr in /home/adam/public_html/2011/01/04/foo.php on line 3 
NULL 

string(15) "10.0.1.51" 

Я бы var_dump($_SERVER) только оценить состояние вашего мир, и идти оттуда.

+0

Я не изменил проницательный код. – imez

+0

Сбрасывание всего $ _SERVER - хорошая идея - я обнаружил реальный IP-адрес за прокси-сервером, с которым я работаю в HTTP_CLIENT_IP таким образом ... – ChrisV

4

@James @imez

По умолчанию клиент IP находится в $ _SERVER [ 'REMOTE_ADDR']. Когда пользователь входит на ваш сайт с помощью сервера PROXY (HTTP-шлюз), он сообщает вам, для кого он подключен (HTTP_X_FORWARDED_FOR), и предоставит его собственный прокси-сервер в $ _SERVER ['REMOTE_ADDR'].

Анонимные прокси будут пропускать HTTP_X_FORWARDED_FOR или просто лгать вам.

Зная, что у вас настоящий IP-клиент, невозможно.

+0

Я сказал, что в своем комментарии к моему ответу. Это никогда не является * guarentee *, что настоящий IP-адрес находится в 'HTTP_X_FORWARDED_FOR', но, как я уже сказал, большую часть времени он есть. – James

+0

@James: Ты просто быстрее меня ;-) - и исправьте –

+0

что делать, если это происходит на localhost? как я знаю, я использую прокси (что, конечно, я не использую)? –

Смежные вопросы