For my current project, I need to get the remote IP address in a Node.js http.createServer((req,res)=>{}); function. I've tried looking through the API documentation for Node.js itself, with no luck, then turning to Google, with most answers appearing to use Express.js. The answers seemed to point at req.connection.remoteAddress (which works, but breaks if used with a proxy) or req.headers['x-forwarded-for'], however this returned undefined when I tried to use it. Any help is greatly appreciated.
For my current project, I need to get the remote IP address in a Node.js http.createServer((req,res)=>{}); function. I've tried looking through the API documentation for Node.js itself, with no luck, then turning to Google, with most answers appearing to use Express.js. The answers seemed to point at req.connection.remoteAddress (which works, but breaks if used with a proxy) or req.headers['x-forwarded-for'], however this returned undefined when I tried to use it. Any help is greatly appreciated.
Share Improve this question asked Dec 15, 2019 at 5:39 LostEth0LostEth0 1442 silver badges11 bronze badges2 Answers
Reset to default 7You almost had it, try:
var clientip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
This will set clientip
to the correct value if a proxy is used. If no proxy is used, clientip
gets set to the ip address of the client initiating the connection.
'connection' is deprecated. since v13.0.0 - Use socket instead.
const clientip = req.headers['x-forwarded-for'] || req.socket.remoteAddress;