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);
- req.checkBody不是一个函数
- Express.js:如何使用基于NODE_ENV的不同中间件?
- 如何获取通过sails.js中的窗体发送的数组/对象(使用enctype multipart / form-data)
- connect(node.js)中的访问控制源
- 在Node.js Express.js Mongoose中input字段validation
- express.static与res.sendFile
- 如何使用Express(Node.js)的multer插件?
- 如何将多个POSTparameter passing给mongodb并获得匹配结果
- 我怎样才能使用XMLHttpRequest()不断地发送数据到我的网站的另一个页面?