Как я могу получить клиентский IP используя PHP?
У меня есть веб-страница с PHP, и я пытаюсь получить IP-адрес клиента, но я получаю IP-адрес GATEWAY сервера (192.168.0.1).
Вот что у меня в офисе:
ISP ---> ISP router ---> Мой маршрутизатор (192.168.0.1) ----> (192.168.0.2) Мой сервер.
Я перепробовал все эти строки, но я не смог получить реальный ip, только ip.
$_SERVER['HTTP_X_FORWARDED_FOR']
$_SERVER['HTTP_CLIENT_IP']
$_SERVER['HTTP_X_REAL_IP']
$_SERVER['GATEWAY_INTERFACE']
$_SERVER['SERVER_ADDR']
$_SERVER['SERVER_NAME']
$_SERVER['SERVER_SOFTWARE']
$_SERVER['SERVER_PROTOCOL']
$_SERVER['REQUEST_METHOD']
$_SERVER['REQUEST_TIME']
$_SERVER['QUERY_STRING']
$_SERVER['DOCUMENT_ROOT']
$_SERVER['HTTP_ACCEPT']
$_SERVER['HTTP_ACCEPT_CHARSET']
$_SERVER['HTTP_ACCEPT_ENCODING']
$_SERVER['HTTP_ACCEPT_LANGUAGE']
$_SERVER['HTTP_CONNECTION']
$_SERVER['HTTP_HOST']
$_SERVER['HTTP_REFERER']
$_SERVER['HTTP_USER_AGENT']
$_SERVER['HTTPS']
$_SERVER['REMOTE_ADDR']
$_SERVER['REMOTE_HOST']
$_SERVER['REMOTE_PORT']
$_SERVER['SCRIPT_FILENAME']
$_SERVER['SERVER_ADMIN']
$_SERVER['SERVER_PORT']
$_SERVER['SERVER_SIGNATURE']
$_SERVER['PATH_TRANSLATED']
$_SERVER['SCRIPT_NAME']
$_SERVER['REQUEST_URI']
$_SERVER['PHP_AUTH_DIGEST']
$_SERVER['PHP_AUTH_USER']
$_SERVER['PHP_AUTH_PW']
$_SERVER['AUTH_TYPE']
Следующие переменные являются "неопределенными":
-HTTP_X_FORWARDED_FOR
-HTTP_CLIENT_IP
-HTTP_X_REAL_IP
-HTTPS
-REMOTE_HOST
-PATH_TRANSLATED
-PHP_AUTH_DIGEST
-PHP_AUTH_USER
-PHP_AUTH_PW
-AUTH_TYPE
РЕДАКТИРОВАТЬ: пробовал "var_dump($_SERVER)" и не может найти IP-адрес клиента:(
РЕДАКТИРОВАТЬ 2: Я немного погуглил, и я "нашел ответ". То, что сказал пользователь Martin Hohenberg, верно. В процессе NAT заголовки уничтожаются, поэтому мой сервер не может прочитать исходный IP-адрес. На данный момент я не знаю возможного решения этой проблемы без перемещения сервера на передний план.
2 ответа
Если вы делаете запрос с компьютера, на котором работает сервер, то $_SERVER['REMOTE_ADDR']
будет очевидно содержать ваш собственный IP-адрес, который является 192.168.0.1
Пытаться
echo $_SERVER['REMOTE_ADDR'];
function getUserIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //if from shared
{
return $_SERVER['HTTP_CLIENT_IP'];
}
else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //if from a proxy
{
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
return $_SERVER['REMOTE_ADDR'];
}
}
Пожалуйста, проверьте ссылку "читать дальше" и ссылку "Вопрос"