您的位置:

获取客户端IP地址的方法及示例代码 - 程序开发者必知!

在开发Web程序时,获取客户端IP地址可以帮助我们更好地了解用户行为,进而对我们的Web应用做出优化和改进。本文将从多个方面对获取客户端IP地址的方法及示例代码进行详细的阐述。

一、从浏览器获取IP地址

在前端页面中,可以通过JavaScript的window对象来获取客户端IP地址。以下是示例代码:

function getIPAddress() {
  fetch('https://api.ipify.org/?format=json')
    .then(response => response.json())
    .then(data => console.log(data.ip));
}

在上述代码中,我们使用了fetch方法调用了一个IP地址查询的API。当API返回结果时,我们可以通过data对象获取客户端IP地址。

二、从HTTP头中获取IP地址

在后端程序中,可以通过解析HTTP头获取客户端IP地址。以下是示例代码:

function getClientIP(req) {
  return req.headers['x-forwarded-for'] || req.connection.remoteAddress;
}

在上述代码中,我们从HTTP头中获取了X-Forwarded-For字段的值作为客户端IP地址。如果该字段不存在,则返回req.connection.remoteAddress字段的值。

三、从代理服务器获取IP地址

在一些情况下,客户端的请求可能会通过代理服务器转发。此时,无法从HTTP头中获取客户端真实IP地址。以下是示例代码:

function getClientIP(req) {
  const ipList = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'].split(',') : [];

  while (ipList.length) {
    const ip = ipList.pop().trim();

    if (!['unknown', 'undefined', 'null', ''].includes(ip.toLowerCase())) {
      return ip;
    }
  }

  return req.connection.remoteAddress;
}

在上述代码中,我们使用循环获取从代理服务器转发的IP地址列表。从列表的尾部开始,依次取出每个IP地址并去除首尾空格。如果取出的IP地址非空,则返回该值,表示获取到了客户端真实IP地址。如果列表循环完毕仍未获取到客户端真实IP地址,则返回req.connection.remoteAddress字段的值。