Получить 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'], если они присутствуют. Если нет, вам придется обойтись прокси-адресом.

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