我正在尝试使用 express 从传入连接中获取远程 IP 地址。已经尝试了在网上找到的常见解决方案:
- req.headers['x-forwarded-for'] / 结果:始终未定义
- req.socket.remoteAddress / 结果:始终获取网关 IP(IE:192.168.1.1)而不是外部地址。
有什么线索吗?
您是否通过在自己机器上的 VM 中运行应用程序来测试这一点?如果是这样,你得到了正确的答案。X-Forwarded-For 是空的,因为没有代理,并且您在主机上看到虚拟机用来路由的虚拟接口。那是请求来自的IP。
这是我在http://th.issh.it/ip使用的一些代码
也许它是区分大小写的?
exports.iptoy = function(req,res) {
var clientip = req.socket.remoteAddress;
var xffip = req.header('X-Forwarded-For');
var ip = xffip ? xffip : clientip;
if(req.params.format == 'json')
res.send({client:clientip,xforwardedfor:xffip});
else
res.send(ip+"\n");
}