首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Node JS Express JS中获取真实用户IP或远程IP地址

在Node.js Express.js中获取真实用户IP或远程IP地址可以通过req对象的headers属性来获取。具体步骤如下:

  1. 在Express.js应用中,引入相关模块:
代码语言:txt
复制
const express = require('express');
const app = express();
  1. 创建一个中间件函数,用于获取真实用户IP地址:
代码语言:txt
复制
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);
}
  1. 在路由处理函数中调用中间件函数获取真实用户IP地址:
代码语言:txt
复制
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)产品,您可以通过以下链接了解更多信息:

请注意,以上答案仅供参考,具体实现方式可能因实际情况而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券