Javascript 从Meteor中的请求对象获取IP地址

Javascript 从Meteor中的请求对象获取IP地址,javascript,meteor,request,iron-router,Javascript,Meteor,Request,Iron Router,我想在将客户端重定向到外部URL之前检索客户端的IP地址 这是我的密码: Router.route('/:_id', {name: 'urlRedirect', where: 'server'}).get(function () { var url = Urls.findOne(this.params._id); if (url) { var request = this.request; var response = this.response;

我想在将客户端重定向到外部URL之前检索客户端的IP地址

这是我的密码:

Router.route('/:_id', {name: 'urlRedirect', where: 'server'}).get(function () {
    var url = Urls.findOne(this.params._id);
    if (url) {
        var request = this.request;
        var response = this.response;
        var headers = request.headers;
        console.log(headers['user-agent']);
        this.response.writeHead(302, {
            'Location': url.url
        });
        this.response.end();
    } else {
        this.redirect('/');
    }
});
我的问题是:我可以从
请求
对象获取IP地址吗?

根据,您从
获取的请求如下。请求
将是一个典型的NodeJS请求对象:

Router.route('/download/:file', function () {
  // NodeJS request object
  var request = this.request;

  // NodeJS  response object
  var response = this.response;

  this.response.end('file download content\n');
}, {where: 'server'});
因此,您应该能够在
this.request.connection.remoteAddress
中循环IP地址


如中所述,在某些情况下,您可能还必须查看
this.request.headers['x-forwarded-for']

我尝试过,结果是
127.0.0.1
。因此,如果我的应用程序运行在
127.0.0.1:3000
上,那么我想localhost是正确的?非常正确!您应该尝试使用其他设备连接到本地网络(智能手机可以正常工作),然后转到http://:3000。然后你应该在结果中获得另一台设备的本地IP。我在iPhone上尝试过,但也得到了
127.0.0.1
,尽管我使用了计算机的IP地址。有什么想法吗?
this.request.headers['x-forwarded-for']
在我的机器
127.0.0.1
和iPhone上返回内部IP地址。是否可以获取外部IP地址?是的,您可以获取外部IP地址,但不能从连接服务器的本地网络上的设备获取。这很好!因为您不希望本地网络中的所有设备都显示相同的外部IP。这样,即使请求来自本地网络,您也可以跟踪它们。检查包: