Конвертировать IPv6 в IPV4 PHP

У меня есть список IP-адресов IPv4, выбранных из базы данных, в которой адреса хранятся как ДВОИЧНЫЕ (16). Есть ли простой способ преобразовать адрес в формате IPv6 в удобочитаемый формат IPv4? Вот как выглядит адрес IPv4 8ab8:7f70::


person pedmillon    schedule 29.07.2016    source источник
comment
Адреса IPv6 имеют длину 128 бит, а адреса IPv4 — только 32 бита. Вы не можете отображать IPv6-адреса в десятичном формате с точками IPv4. IPv6 имеет собственную нотацию. RFC 5952, Рекомендации по текстовому представлению адресов IPv6 — это стандарт IETF для представления адресов IPv6.   -  person Ron Maupin    schedule 29.07.2016
comment
У меня есть адреса IPv4, которые представлены в формате IPv6, например. 8аб8:7ф70::   -  person pedmillon    schedule 29.07.2016
comment
Затем просто преобразуйте четыре байта по отдельности в десятичную строку и соедините их, поместив . между ними.   -  person Ron Maupin    schedule 29.07.2016


Ответы (1)


Как описал Рон Мопен, решение очень простое.

$ipv6 = "8ab8:7f70::";
$ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2));
person pedmillon    schedule 29.07.2016
comment
это не возвращает правильное значение. - person J Shubham; 23.07.2017
comment
Это решение абсурдно, поскольку абсурдна вся посылка. - person deceze♦; 16.08.2017
comment
этот код не работает должным образом, и возвращаемый ipv4 отличается от преобразованного ipv6. - person Anass; 02.06.2020