Saturday, April 13, 2024
 Popular · Latest · Hot · Upcoming
rated 0 times [  48] [ 3]  / answers: 1 / hits: 5462  / 3 Years ago, mon, may 31, 2021, 12:00:00

I am using this code to get the ip address in Node.js:

const ip = await (req.headers['x-forwarded-for'] || '').split(',').pop().trim() || req.socket.remoteAddress;

For all the devices on my home wifi network and when I access my website using data on my phone, I get this ip address: ::ffff:

I'm trying to get the ip address of each individual device (phone, laptop) that visits my site. But all of the devices show the same ip address.

How do I get the individual device ip address of each device in Node.js?


I made some updates and no longer get ::ffff: I now get the ip address of the internet connection. So if I'm connected to wifi, I get the wifi modem ip address. If I'm using data, I get the data connection ip address.

But I need to get the device ip address. I do NOT want the connection ip address. I want the device ip address.

Here are the changes I made:

I set 'trust proxy' to true:

app.set('trust proxy', true);

I updated the etc/nginx/sites-available/mysite file to look like this:

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;

I updated the etc/nginx/proxy_params file to look like this:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

What did I do wrong? How do I fix this? From what I'm reading, it sounds like I should be able to use req.headers['x-forwarded-for'] to get the right ip address, but req.headers['x-forwarded-for'] returns the same thing as req.headers['x-real-ip'] except it is in an array.

More From » node.js


I found another solution for my use case. Based on some people's comments, it looks like it may not be possible to find the private ip address of a device that connects to your website, only the public ip address.

@Cerceis os.networkInterfaces() answer may work. I did a quick test, but was unable to know for sure if it works. I don't have time to test it out more fully. If you are hoping to find an answer, I would try out os.networkInterfaces() in Node.js and that might get you the ip address you're looking for.

[#1297] Sunday, May 23, 2021, 3 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.

Total Points: 59
Total Questions: 98
Total Answers: 98

Location: Falkland Islands
Member since Mon, Jul 13, 2020
4 Years ago