Node.js:获取客户端的IP

时间:2013-10-09 08:05:07

标签: javascript node.js express

req.connection.remoteAddress,req.headers ['x-forwarded-for'],req.ip,req.ips,这是什么意思?

是否有直接的方法来简单地获取客户端/用户代理的IP地址,以便在Node.js / Express中向我的站点发出请求?我不了解所有代理内容或者req对象的所有属性之间的所有差异。另外,我不明白Express的“信任代理”选项是什么。

有人可以直接解释所有这些属性之间的区别,并回答我如何只是简单地获取客户端的IP?

5 个答案:

答案 0 :(得分:52)

req.ip是在Express中获取客户端IP地址的简单方法。您可以看到它使用的逻辑(包括抓取代理地址数组req.ips中的第一项,其中该数组是从x-forwarded-for标题构建的here

答案 1 :(得分:18)

// Get client IP address from request object ----------------------
getClientAddress = function (req) {
        return (req.headers['x-forwarded-for'] || '').split(',')[0] 
        || req.connection.remoteAddress;
};

答案 2 :(得分:2)

非常简单

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

答案 3 :(得分:0)

正如其他人已经注意到的,由于使用代理的潜在用途,你真的应该使用req.ip而不是像许多人推荐的那样使用X-Forwarded-For标头。只要您将代理正确配置为可信代理,req.ip将始终返回最终用户的IP地址。

e.g。如果您有一个从8.8.8.8连接的代理,那么您可以:

var express = require('express');
var app = express();
app.set('trust proxy', '8.8.8.8');

由于您信任代理,因此现在可以将X-Forwarded-For标头中传递的内容存储在req.ip中,但仅限于它来自其中一个可信代理。

有关信任代理can be found here的更多信息。

现在,正如其他人在评论中指出的那样;特别是在本地开发时,您可能会以“:: ffff:127.0.0.1”格式获取IP。

要始终获取我拥有的IPv4地址:

getClientAddress = function (req) {
        return req.ip.split(":").pop();
};

答案 4 :(得分:-1)

获取客户端IP非常简单:

 var ip = req.headers['x-forwarded-for'] || 
     req.connection.remoteAddress || 
     req.socket.remoteAddress ||
     req.connection.socket.remoteAddress;
     console.log(ip);