Странное сочетание 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-адрес клиентского компьютера, либо последний, последний прокси, через который прошло соединение.

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