var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket ? req.connection.socket.remoteAddress : null);
Tenga en cuenta que a veces puede obtener más de una dirección IP req.headers['x-forwarded-for']
. Además, x-forwarded-for
no siempre se establecerá un encabezado que pueda generar un error.
El formato general del campo es:
x-reenviado-para: client, proxy1, proxy2, proxy3
donde el valor es una lista de direcciones IP separadas por comas y espacios, siendo la izquierda el cliente original y cada proxy sucesivo que pasó la solicitud agregando la dirección IP de donde recibió la solicitud. En este ejemplo, la solicitud pasa a través de proxy1
, proxy2
y, a continuación proxy3
. proxy3
aparece como dirección remota de la solicitud.
Esta es la solución sugerida por Arnav Gupta con una solución que Martin ha sugerido a continuación en los comentarios para casos en los x-forwarded-for
que no está configurado:
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress
req.ip
source - expressjs.com/en/api.html#req.ip