Intereting Posts
php multiple if, если? Как использовать javascript внутри функции эха PHP? как я могу получить данные json с php-сервера в android отправить массив данных (одинаковые значения ключа), используя php curl невозможно установить разрешения для загрузки изображений с помощью библиотеки php gd Как вы отправляете NULL как переменную от PHP к SQL? Внедрение пространств имен в режиме без жира MySQL Возвращает различное количество строк на localhost vs live server для одного и того же кода Добавить элементы в отношение Phalcon Many-to-Many Как подключить мою базу данных к Twilio Изменение времени подключения базы данных laravel Лучший способ скомпилировать строку в PHP, которая может быть расшифрована до первоначальной формы динамически создавать текстовые области с уникальными идентификаторами на основе входных данных флажка Laravel ajax возвращает 500 (Внутренняя ошибка сервера) Удалить все несоответствующие символы в строке PHP?

Получение пользователей Реальный IP-адрес с использованием PHP

Я хочу получить реальный IP-адрес от пользователей, идущих на моем сайте, даже если они используют прокси-сайт, например hidemyass.com

Это код, который у меня есть, и думал, что он сработал, но я его протестировал, и он не

<?php function getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } return $ip; } ?> 

Я думал, что этот код будет работать, но прокси-сервер все равно обходит его.

Заранее спасибо.

Не существует гарантированного способа получить «реальный» IP-адрес, если прокси не хочет рассказывать вам об этом (и никакого истинного анонимного прокси не будет ).

Вы не можете. Информация у вас есть от apache / iis / whatever, и она знает только, кто говорит с вашим сервером, который в этом случае является прокси. Если прокси не хочет отправлять эту информацию в заголовке, вы не получите ее.

X-Forwarded-For – лучшее, что вы можете сделать, но вряд ли анонимный прокси отправит это.

Вы не можете получить «реальный» IP-адрес, если только вы не реализуете какой-то протокол проверки подлинности на прикладном уровне, который кодирует IP-адрес (который также подлежит spoofin).

Почему это?

Поскольку пакет данных IP может быть переписан произвольно кем-то «посередине», у которого есть доступ к нему. Например, прокси, маршрутизатор, шлюз и т. Д.

Пакет данных IP имеет такую ​​структуру

 | stuff | src ip | dst ip | stuff | | .... | 32-bits| 32 bits | stuff | 

Итак, src ip – это только биты, помните – могут быть перезаписаны произвольно.

http://www.faqs.org/rfcs/rfc791.html предоставит больше информации.

Если прокси не помещает реальный IP-адрес в заголовки (общий – в зависимости от того, почему используется прокси) (как правило, в какой-то форме «X-something»), вы можете видеть только IP-адрес прокси-сервера.

Я нашел аналогичную запись здесь, чтобы проверить еще несколько заголовков, чтобы узнать, использует ли пользователь прокси-сервер, который может помочь

определить, использует ли пользователь прокси-сервер

Попробуйте это пожалуйста

 function get_IP_address() { foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){ if (array_key_exists($key, $_SERVER) === true){ foreach (explode(',', $_SERVER[$key]) as $IPaddress){ $IPaddress = trim($IPaddress); // Just to be safe if (filter_var($IPaddress, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $IPaddress; } } } } }