Как я могу получить клиентский 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'];
    }
}

Пожалуйста, проверьте ссылку "читать дальше" и ссылку "Вопрос"

Другие вопросы по тегам