在Node.js Express.js中获取真实用户IP或远程IP地址可以通过req对象的headers属性来获取。具体步骤如下:
const express = require('express');
const app = express();
function getRealIP(req) {
const forwarded = req.headers['x-forwarded-for'];
if (forwarded) {
// 如果存在多个代理服务器,取第一个非内网IP地址
const ips = forwarded.split(',');
for (let i = 0; i < ips.length; i++) {
const ip = ips[i].trim();
if (!isPrivateIP(ip)) {
return ip;
}
}
}
// 如果没有设置代理服务器,直接返回远程IP地址
return req.connection.remoteAddress;
}
function isPrivateIP(ip) {
// 判断是否为内网IP地址
// 可根据实际情况自定义判断条件
return /^10\./.test(ip) || /^192\.168\./.test(ip) || /^172\.(1[6-9]|2[0-9]|3[0-1])\./.test(ip) || /^::1$/.test(ip) || /^fd[0-9a-f]{2}:/i.test(ip) || /^localhost$/i.test(ip);
}
app.get('/', (req, res) => {
const ip = getRealIP(req);
res.send(`Your IP address is: ${ip}`);
});
以上代码中,getRealIP函数首先通过req.headers['x-forwarded-for']获取代理服务器转发的IP地址,如果存在多个代理服务器,则取第一个非内网IP地址。如果没有设置代理服务器,则直接返回req.connection.remoteAddress,即远程IP地址。isPrivateIP函数用于判断IP地址是否为内网IP。
对于Node.js Express.js中获取真实用户IP或远程IP地址的问题,腾讯云提供了云服务器(CVM)产品,您可以通过以下链接了解更多信息:
请注意,以上答案仅供参考,具体实现方式可能因实际情况而异。
领取专属 10元无门槛券
手把手带您无忧上云