Преобразование IPv6 в IPv4-адрес в переполнении стека

Мне нужно конвертировать адреса IPv6 в адреса IPv4. Для этого я использовал код из ответ педмиллона на связанный вопрос:

$ipv6 = $_SERVER['REMOTE_ADDR'];
$ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2));

Я попробовал это на моем локальном хосте и :: 1 преобразуется в 0.1.0.0. Этот код работает правильно?

Я считаю, что он должен показывать 127.0.0.1 вместо 0.1.0.0.

1

Решение

IPv4 и IPv6 — это две совершенно разные взаимно несовместимые схемы сетевой адресации. Нет способа «перевести» из одного в другое. Адрес IPv4 не соответствует конкретному адресу IPv6 или наоборот. Подавляющее большинство узлов в Интернете все еще используют IPv4-адреса исключительно на этом этапе, некоторый небольшой процент использует одновременно два стека IPv4 и IPv6, и очень небольшое количество может быть исключительно IPv6. Узлы IPv4 и IPv6 не могут напрямую общаться друг с другом. В конечном итоге все должны переходить исключительно на IPv6, но это далеко.

Можете ли вы объяснить, как я могу использовать адрес IPv6 для блокировки стран?

Точно так же, как вы блокируете определенные регионы с помощью IPv4: получите базу данных, которая сопоставляет IP-адреса с географическими местоположениями. Разница лишь в том, что вам нужно найти базу данных или службу, которая делает это для IPv6 адреса.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector