req.connection.remoteAddress,req.headers ['x-forwarded-for'],req.ip,req.ips,这是什么意思?
是否有直接的方法来简单地获取客户端/用户代理的IP地址,以便在Node.js / Express中向我的站点发出请求?我不了解所有代理内容或者req对象的所有属性之间的所有差异。另外,我不明白Express的“信任代理”选项是什么。
有人可以直接解释所有这些属性之间的区别,并回答我如何只是简单地获取客户端的IP?
答案 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);