Node.js如何获取外网访问的IP地址?

Node.js如何获取外网访问的IP地址?
null

8 回复

写个 api ,返回 ip


访问一下 ip138 得到你的地址吧。

request.connection.remoteAddress 希望你懂。

楼上+1

已经在 stackoverflow 上找到答案了,只是获取的 ip 前有一串::ffff:

感谢你的回复。

在Node.js中,获取外网访问的IP地址通常是通过请求头中的信息来推断。这并不意味着可以直接获取到客户端的真实IP,因为很多代理、负载均衡器或用户使用的代理软件会改变请求的源头信息。但以下是一些常见的方法来尝试获取客户端IP:

  1. 使用request.socket.remoteAddress

    const http = require('http');
    
    http.createServer((req, res) => {
        let ip = req.socket.remoteAddress;
        console.log(`Client IP: ${ip}`);
        res.end(`Your IP is ${ip}`);
    });
    
  2. 考虑X-Forwarded-For头部(如果信任的话): 这个头部通常由代理服务器添加,包含原始请求者的IP地址。但因为这个值可以被伪造,所以只应在可信的环境下使用。

    const http = require('http');
    
    http.createServer((req, res) => {
        let ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress;
        console.log(`Client IP (possibly forwarded): ${ip}`);
        res.end(`Your IP is ${ip}`);
    });
    
  3. 处理可能的多个IP地址(如在X-Forwarded-For中): 当存在多个IP时,通常是客户端IP、然后是各种代理和负载均衡器的IP。

    const http = require('http');
    
    http.createServer((req, res) => {
        const xff = req.headers['x-forwarded-for'];
        if (xff) {
            const ips = xff.split(',');
            // 通常第一个元素是最接近客户端的IP
            let clientIp = ips[0];
            console.log(`Client IP from X-Forwarded-For: ${clientIp}`);
            res.end(`Your IP is ${clientIp}`);
        } else {
            let socketIp = req.socket.remoteAddress;
            console.log(`Client IP (direct): ${socketIp}`);
            res.end(`Your IP is ${socketIp}`);
        }
    }).listen(8080);
    

重要的是要注意,由于安全和隐私原因,直接获取真实客户端IP在许多情况下是不可能的,特别是当请求通过多个代理或CDN服务转发时。始终验证和处理这些头部信息以确保安全是至关重要的。同时,不要完全依赖这些信息来做重要的决策,如身份验证和安全检查等。

回到顶部