::ffff:
é um prefixo de sub-rede para endereços IPv4 (32 bits) colocados dentro de um espaço IPv6 (128 bits). O IPv6 é dividido em duas partes, o prefixo da sub-rede e o sufixo da interface. Cada um tem 64 bits ou 4 grupos de 4 caracteres hexadecimais.
No IPv6, você tem permissão para remover zeros à esquerda e, em seguida, remover zeros consecutivos, o que significa que ::ffff:
na verdade se traduz em 0000:0000:ffff:0000
, este endereço foi designado como o prefixo de sub-rede IPv4 para IPv6, então qualquer processador IPv6 entenderá que está trabalhando com um endereço IPv4 e o tratará adequadamente.
Em um futuro próximo, os endereços IP serão todos IPv6, isso porque estamos quase sem números (4,2 bilhões, menos algum espaço para diversos fins) no espaço de endereços IPv4.
O IPv6 permite um espaço muito maior. "340 undecilhões deveriam ser o suficiente para qualquer um" - Bill Gates falando sobre IPv6.
É importante começar a endereçar endereços IP usando o namespace IPv6 e, portanto, incluí- ::ffff:
los em seu código, porque no futuro haverá dados hexadecimais reais entre esses dois pontos. Se você retirá-lo por motivos estéticos, seu código será interrompido quando for alternado para uma rede IPv6 ou confrontado com um endereço IPv6.
Algumas redes estão rodando IPv6 e você logo será confrontado com endereços IP IPv6; dê o salto agora ou arrisque quebrar seu código no futuro.
A versão TL; DR (curta) da questão é: Tudo está funcionando bem. Não mude, é a versão IPv6 de um endereço IPv4.
Se você deseja tornar seu código compatível com IPv6, basta verificar o ::ffff:
prefixo ... se existir, remova-o e processe o restante como IPv4 ... se ::ffff:
não existir, é um endereço IPv6 e precisa ser processado como tal. Você pode verificar se há pontos na string, se sim, é IPv4.
Lembre-se de tudo, exceto os ajustes que você precisa fazer nos endereços IP, você está apenas gravando o IP, certo? Será importante que o analisador e os agregados de log esperem ::ffff:127.0.0.1
e tal no futuro. A menos que você precise alterar um IP, deixe-o como está sendo recebido.
req.ip
oureq.ips
?