visual studio node guide docs debug code javascript node.js express

javascript - studio - Node.js: obtener la IP del cliente



node js get hostname (5)

req.connection.remoteAddress, req.headers [''x-forward-for''], req.ip, req.ips, ¿qué significa todo esto?

¿Existe una forma sencilla de obtener simplemente la dirección IP del cliente / usuario-agente que realiza la solicitud a mi sitio en Node.js / Express? No entiendo todas las cosas de proxy ni todas las diferencias entre todas las propiedades del objeto de solicitud. Además, no entiendo qué es la opción ''trust proxy'' para Express.

¿Podría alguien darme una explicación directa de cuál es la diferencia entre todas estas propiedades, y responder cómo puedo simplemente obtener la IP del cliente?


Como otros han notado, debido al uso potencial del uso de proxies, realmente debería usar req.ip y NO usar el encabezado X-Forwarded-For como muchas personas recomiendan. Siempre que configure correctamente un proxy como un proxy de confianza, req.ip siempre devolverá la dirección IP del usuario final.

Por ejemplo, si tuviera un proxy que se conecta desde 8.8.8.8, haría:

var express = require(''express''); var app = express(); app.set(''trust proxy'', ''8.8.8.8'');

Puesto que confía en el proxy, ahora lo haría, por lo que lo que se pasa en el encabezado X-Forwarded-For se almacenará en req.ip, pero SOLAMENTE si proviene de uno de los proxies de confianza.

Puede encontrar más información sobre el proxy de confianza aquí .

Ahora, como otros han notado en los comentarios; especialmente cuando se desarrolla localmente, puede obtener la ip en el formato ":: ffff: 127.0.0.1".

Para obtener siempre la dirección IPv4 que tengo:

getClientAddress = function (req) { return req.ip.split(":").pop(); };


Obtener la IP del cliente es bastante sencillo:

var ip = req.headers[''x-forwarded-for''] || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress; console.log(ip);


muy simple

function getClientIP(req){ return req.headers[''x-forwarded-for''] || req.connection.remoteAddress; }


req.ip es la forma directa de obtener la dirección IP del cliente en Express. Puede ver la lógica que usa (que implica tomar el primer elemento de la matriz de direcciones proxy req.ips , donde esa matriz se construye a partir de los encabezados x-forwarded-for ) here .


// Get client IP address from request object ---------------------- getClientAddress = function (req) { return (req.headers[''x-forwarded-for''] || '''').split('','')[0] || req.connection.remoteAddress; };