Node.js:获取客户端的IP

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

有没有简单的方法来简单地获取客户端/用户代理的请求到我的网站在Node.js / Express的IP地址? 我不理解所有的代理的东西或所有req对象的属性之间的所有差异。 此外,我不明白什么'信任代理'选项是为快递。

有人可以直接向我解释所有这些属性之间的差别,并回答我如何才能简单地获得客户的IP?

req.ip是在Express中获取客户端IP地址的直接方式。 你可以在这里看到它使用的逻辑(包括从代理地址req.ips数组中获取第一项,其中该数组是从x-forwarded-for标头构build的)。

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

很简单

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

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

例如,如果你有一个从8.8.8.8连接的代理,你可以这样做:

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

既然你信任这个代理,现在就可以这样做了,那么在X-Forwarded-For头中传递的信息将被存储在req.ip中,但是只有它来自一个可信的代理。

更多关于信任代理可以在这里find 。

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

总是得到IPv4地址我有:

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

获取客户端IP非常简单:

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