Particularmente para el nodo, la documentación para el componente del servidor http, bajo conexión de evento dice:
[Activado] cuando se establece una nueva secuencia TCP. [El] socket es un objeto de tipo net.Socket. Por lo general, los usuarios no querrán acceder a este evento. En particular, el socket no emitirá eventos legibles debido a cómo el analizador de protocolo se conecta al socket. También se puede acceder al zócalo enrequest.connection
.
Entonces, eso significa que request.connection
es un socket y de acuerdo con la documentación, de hecho, hay un atributo socket.remoteAddress que de acuerdo con la documentación es:
La representación de cadena de la dirección IP remota. Por ejemplo, '74 .125.127.100 'o' 2001: 4860: a005 :: 68 '.
Bajo express, el objeto de solicitud también es una instancia del objeto de solicitud http Node, por lo que este enfoque aún debería funcionar.
Sin embargo, en Express.js la solicitud ya tiene dos atributos: req.ip y req.ips
req.ip
Devuelva la dirección remota o cuando el "proxy de confianza" esté habilitado: la dirección ascendente.
req.ips
Cuando "proxy de confianza" es true
, analice la lista de direcciones IP "X-Fordered-For" y devuelva una matriz, de lo contrario se devuelve una matriz vacía. Por ejemplo, si el valor fuera "cliente, proxy1, proxy2", recibiría la matriz ["cliente", "proxy1", "proxy2"] donde "proxy2" es el flujo descendente más alejado.
Vale la pena mencionar que, según tengo entendido, el Express req.ip
es un mejor enfoque quereq.connection.remoteAddress
, ya que req.ip
contiene la IP del cliente real (siempre que el proxy de confianza esté habilitado en express), mientras que el otro puede contener la dirección IP del proxy (si hay uno).
Esa es la razón por la cual la respuesta actualmente aceptada sugiere:
var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress;
El req.headers['x-forwarded-for']
será el equivalente de express req.ip
.