Странное сочетание IP-адреса
Добрый день,
Я использую следующий код на PHP для получения IP-адреса:
$IPkey = array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR');
foreach($IPkey as $name){
if(isset($_SERVER[$name])) return $_SERVER[$name];
}
Теперь с клиентом я получаю очень неудобные результаты.
Я неожиданно получаю следующие результаты:
- 2001: 1c04: 3403: 9bf0: a8a6: 2d21: 8006: 159, 172.69.55.30
- 2001: 1c04: 3403: 9bf0: a8a6: 2d21: 8006: 159, 162.158.111.183
- 2001: 1c04: 3403: 9bf0: a8a6: 2d21: 8006: 159, 141.101.105.236
- 2001: 1c04: 3403: 9bf0: a8a6: 2d21: 8006: 159, 172.69.55.208
- 2001: 1c04: 3403: 9bf0: a8a6: 2d21: 8006: 159, 172.69.55.209
Клиент утверждает, что использует систему только с одного ПК. Конечно, смею усомниться в этом утверждении.
Но я просто не могу понять эти IP-адреса. Это похоже на IPv4-адреса, добавленные к IPv6-адресу.
Я надеюсь, что кто-нибудь может сказать мне, каков их настоящий IP-адрес, и вставлен ли это их внутренний адрес в адрес их маршрутизаторов? И как этого избежать?
РЕДАКТИРОВАТЬ: Я попытаюсь объяснить еще раз. Я использую вышеупомянутый код для получения IP-адреса.
Теперь я получаю следующие результаты, как указано выше. Похоже, я имею в виду:
2001: 1c04: 3403: 9bf0: a8a6: 2d21: 8006: 159 И 172.69.55.30
Но я получаю полную строку: 2001:1c04:3403:9bf0:a8a6:2d21:8006: 159, 172.69.55.30 Как это IP-адрес. На мой взгляд, это маловероятно. Но все же это именно то, что мне вернули.
И мне интересно, почему это?
1 ответ
Порядок ваших "ключей" важен. Таким образом, даже если вам действительно нужен удаленный адрес, вы, скорее всего, получите
HTTP_X_FORWARDED_FOR
. Думаю, это то, на что вы смотрите. Его значение - это заголовок HTTP, отправляемый вместе с HTTP-запросом.
HTTP_X_FORWARDED_FOR
может содержать несколько IP-адресов. Когда запрос связан более чем через один прокси-сервер, каждый прокси должен добавить IP-адрес предыдущего к существующему заголовку X-Forwarded-For, чтобы вся цепочка была сохранена. Синтаксис:
X-Forwarded-For: <client>, <proxy1>, <proxy2>
См. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For
Поскольку адреса IPv4 и IPv6 не содержат запятых, вы можете найти запятую, чтобы узнать, есть ли у вас несколько IP-адресов. Если вы это сделаете, вы можете либо взять первый, IP-адрес клиентского компьютера, либо последний, последний прокси, через который прошло соединение.