Получить IP-адрес пользователя для geolock (не адрес 192.168)
Я заблокировал нашу программу, у нас есть служба, которая возвращает код страны для нас. Но если кто-то находится за маршрутизатором, у него есть локальный адрес 192.168.xx, и это мне ничего не говорит. Есть ли способ узнать их адрес на роутере? Я мог бы сделать трассировку, но тогда мне нужно самому программировать логику о том, какой ip полезен, а какой нет. Я делаю этот код с сервера в php, а наше клиентское веб-приложение в javascript. Пожалуйста, порекомендуйте.
Спасибо
2 ответа
function get_real_ip() {
if (!empty($_SERVER['HTTP_X_FORWARED_FOR']))
{
$client_ip = $_SERVER['HTTP_X_FORWARED_FOR'];
}
elseif (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$client_ip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$client_ip = $_SERVER['REMOTE_ADDR'];
}
return $client_ip;
}
Для серверного программного обеспечения переменная PHP $_SERVER['REMOTE_ADDR'] даст адрес клиента. Для клиентов за маршрутизатором их адрес будет переведен микропрограммой маршрутизатора, поэтому сервер увидит открытый IP-адрес маршрутизатора, а не локальный частный адрес клиента.
Все это еще более запутано из-за возможного присутствия промежуточных прокси-серверов, которые могут или не могут сказать вам, каков их адрес клиента. Вы можете посмотреть на $_SERVER['HTTP_X_FORWRDED_FOR'] или $_SERVER['HTTP_CLIENT_IP'], если они присутствуют. Если нет, вам придется обойтись прокси-адресом.