Actualmente estoy tratando de obtener la IP del usuario solicitado. El problema es que la IP está regresando en ::ffff:127.0.0.1
lugar de 127.0.0.1
. Intenté usar la trusted proxy
opción (aunque no usé un proxy) y req.ips
está en blanco. Usando 4.x Express.js.
router.get('/', function(req, res, next) {
console.log('ip', req.ip)
res.send({})
});
req.ip
oreq.ips
?req.ip
, solo probadoreq.ips
como prueba. Simplemente no estoy seguro de qué está causando el prefijo::ffff:
.Dotted-quad notation
.Respuestas:
::ffff:
es un prefijo de subred para direcciones IPv4 (32 bits) que se colocan dentro de un espacio IPv6 (128 bits). IPv6 se divide en dos partes, el prefijo de subred y el sufijo de interfaz. Cada uno tiene 64 bits de longitud o 4 grupos de 4 caracteres hexadecimales.En IPv6, puede eliminar los ceros iniciales y luego eliminar los ceros consecutivos, lo que significa que en
::ffff:
realidad se traduce en0000:0000:ffff:0000
, esta dirección ha sido designada como el prefijo de subred IPv4 a IPv6, por lo que cualquier procesador IPv6 entenderá que está funcionando con una dirección IPv4 y la manejará. en consecuencia.En un futuro cercano, todas las direcciones IP serán IPv6, esto se debe a que estamos casi sin números (4,2 mil millones, menos algo de espacio para propósitos diversos) en el espacio de direcciones IPv4.
Es importante comenzar a direccionar las direcciones IP utilizando el espacio de nombres IPv6 y, por lo tanto, incluirlas
::ffff:
en su código porque en el futuro habrá datos hexadecimales reales entre esos dos puntos. Si lo quita por razones estéticas, su código se romperá cuando cambie a una red IPv6 o se enfrente a una dirección IPv6.Algunas redes ejecutan actualmente IPv6 y pronto se enfrentará a direcciones IP IPv6; dé el salto ahora o arriesgue su código en el futuro.
La versión TL; DR (corta) del asunto es: Todo está funcionando bien. No lo cambie, es la versión IPv6 de una dirección IPv4.
Si desea que su código sea compatible con IPv6, todo lo que tiene que hacer es verificar el
::ffff:
prefijo ... si existe, eliminarlo y procesar el resto como IPv4 ... si::ffff:
no existe, es una dirección IPv6 y necesita ser procesado como tal. Puede verificar si hay puntos en la cadena, si es así, es IPv4.Tenga en cuenta que para todo menos los ajustes que necesita hacer en las direcciones IP, solo está grabando la IP, ¿verdad? Será importante para el analizador y los agregados de registros esperar
::ffff:127.0.0.1
y demás en el futuro. A menos que necesite modificar una IP, déjela como lo recibe.fuente
::ffff:
prefijo . Ya sabes, un IPv6 tiene muchas notaciones.Esto parece ser una peculiaridad de ipv6: para las direcciones ipv4, ipv6 parece mezclar la notación ipv6 con la notación ipv4.
Para obtener las direcciones ipv4 e ipv6 en la notación simple y sin mezclar, estoy usando:
fuente
Si solo necesita IPv4, puede obligar al servidor de nodo a escuchar usando IPv4.
Para una edición rápida de la aplicación
/bin/www
:cambio
a
Esto funcionó para mí al menos.
https://nodejs.org/api/net.html#net_server_listen_port_host_backlog_callback
fuente
Windows 7 tiene IPv6 habilitado de forma predeterminada. Aunque mi servidor solo escucha en IPv4, Windows 7 envía el
::ffff:
prefijo a IPv4 como parte de la transición a IPv6Transición de IPv4
fuente
Estaba teniendo problemas al intentar comparar direcciones asignadas ipv4 y encontré útil la biblioteca ipaddr.js :-)
p.ej
fuente
Intente esto para obtener la dirección IP exacta eliminando las subredes,
fuente
Puede obtener su dirección IP sola o con la familia especificada usando sockets
fuente
fuente