::ffff:
- це префікс підмережі для IPv4 (32 бітових) адрес, які розміщені всередині простору IPv6 (128 біт). IPv6 розбитий на дві частини, префікс підмережі та суфікс інтерфейсу. Кожен має довжину 64 біти, або 4 групи з 4 шістнадцяткових символів.
У IPv6 вам дозволяється видаляти ведучі нулі, а потім видаляти послідовні нулі, тобто ::ffff:
фактично перекладається на 0000:0000:ffff:0000
, ця адреса була призначена як префікс підмережі IPv4 до IPv6, тому будь-який процесор IPv6 зрозуміє, що він працює з адресою IPv4, і обробляє її відповідно.
Найближчим часом усі IP-адреси будуть IPv6, це тому, що в адресному просторі IPv4 у нас майже не вистачає номерів (4,2 млрд., Мінус деякий простір для різних цілей).
IPv6 забезпечує набагато більший простір. "340 немільйонів має бути достатньо для всіх" - Білл Гейтс, виступаючи на IPv6.
Важливо розпочати адресувати IP-адреси за допомогою простору імен IPv6 і, отже, включити ::ffff:
у свій код, оскільки в майбутньому між цими двокрапками будуть справжні шістнадцяткові дані. Якщо ви позбавите його з естетичних міркувань, ваш код зламається, коли він перемикається на мережу IPv6 або стикається з адресою IPv6.
Наразі в деяких мережах працює IPv6, і незабаром ви зіткнетеся з IPv6-адресами IPv6; зробіть стрибок зараз або ризикуйте зламати свій код у майбутньому.
TL; DR (коротка) версія питання: Все працює нормально. Не змінюйте це, це версія IPv6 адреси IPv4.
Якщо ви хочете зробити свій код сумісним з IPv6, все, що вам потрібно зробити, це перевірити ::ffff:
префікс ... якщо він існує, видаліть його та обробіть решту як IPv4 ... якщо ::ffff:
не існує, це адреса IPv6 і потребує обробки як такої. Ви можете ще раз перевірити, чи є в рядку крапки, якщо так, це IPv4.
Майте на увазі все, крім коригувань, які вам потрібно зробити для IP-адрес, ви просто записуєте IP, так? Це буде важливо для аналізатора та агрегатів журналів, які слід очікувати, ::ffff:127.0.0.1
і таких у майбутньому. Якщо вам не потрібно змінити IP, просто залиште його як отриманий.
req.ip
чиreq.ips
?