快递/节点请求者IP
我正在尝试构建一个API,它为不同的IP地址返回不同的东西。例如,重定向到我的服务器(比如google.com)的某个域将显示一件事,而另一个域(如amazon.com)会显示不同的内容。快递/节点请求者IP
我曾尝试使用中间件,看req.ip,但它似乎像req.ip总是从任何请求返回“:: ffff:127.0.0.1”。另外,我想限制通过最后跳转到我的服务器的连接 - 即显示基于website.com的不同内容,其中: 客户端浏览器 - > website.com - >我的服务器。
我怎么会去这样做使用Express.js
编辑:我认为人们误解我的问题:我不希望由客户端的IP过滤我的结果。我想过滤最后反弹到我的服务器的结果。即如果客户端连接到redirect.com并重定向到我的服务器,我想检测redirect.com的IP和基于此的过滤器。假设有另一个名为fam.com的网站也转发到我的服务器。我想向fam.com显示不同的内容,而不是redirect.com。
这对我有用。
var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress;
if (ip && ip.startsWith("::ffff:")) {
ip = ip.replace("::ffff:", "")
}
好像这个解决方案的一个变种现在可以工作。使用app.set('trust proxy'),然后req.ips的最后一个值给出最后一个代理从请求中退出。看起来像x-forwarded-for头可以被欺骗,但是...希望我可以找出别的东西来检测试图欺骗头的人。 – intrinsiciwnl
你使用任何类型的代理?如果是的话,你需要配置你的代理转发ip –
将req.ip在express然后返回请求的起始地址或最接近的反弹? – intrinsiciwnl
如果您使用代理服务器,请查看是否设置了'refferer'标题。否则,尝试从客户端发送IP作为变量。 –