【问题标题】:Get Public IP Address for node.js application获取 node.js 应用程序的公共 IP 地址
【发布时间】:2014-12-16 02:49:18
【问题描述】:

是否有任何 node.js 模块可用于获取发出请求的客户端计算机的公共 IP 地址?我不是指 IPv4 或 IPv6,我需要像您访问 http://www.whatismyip.com/ 时获得的公共 IP

我试过req.connection.remoteAddress;,但它没有返回公共IP。它必须是公开的,这样我才能根据 IP 地址定位城市。

谢谢:)

【问题讨论】:

  • 当我使用 var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;在 http.createServer(function(req,res) {});它说 TypeError: Object # has no method 'header'。你发给我的链接是不是过期了???
  • 这样不显示IP,只会报错
  • 我不断得到 IPv4
  • IPv4 是公共地址,它是您链接中显示的内容。你到底在期待什么,你能发布一个期望值的例子吗?

标签: javascript node.js ip


【解决方案1】:

我知道这个老问题,但现在你可以使用http://whatismyipaddress.com/api 来获取 IP。只需向 bot.whatismyipaddress.com 发送请求并获取结果。

var http = require('http');
http.get('http://bot.whatismyipaddress.com', function(res){
    res.setEncoding('utf8');
    res.on('data', function(chunk){
        console.log(chunk);
    });
});

【讨论】:

    【解决方案2】:
    var ip = (req.headers && req.headers['x-forwarded-for'])
             || req.ip 
             || req._remoteAddress 
             || (req.connection && req.connection.remoteAddress);
    

    【讨论】:

      【解决方案3】:

      下一行应该够了

      let ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress;
      

      如果您在本地进行测试,您将看到私有 IP,但如果您在云端进行测试,您将收到的 IP 是公共 IP。

      你可以使用ngrok在本地测试它

      【讨论】:

        【解决方案4】:

        这是一个名为 external-ip 的封装,可以为你做这件事 va npm install external-ip

        var externalip = require('external-ip');
        externalip(function (err, ip) {
           console.log(ip); // => 8.8.8.8
        });
        

        (来源:https://www.npmjs.org/package/external-iphttps://stackoverflow.com/a/24608249/823548

        【讨论】:

        • 我看到了那个模块,但我并没有试图找到服务器计算机的公共 ip,我正在尝试为客户端计算机获取它
        猜你喜欢
        • 2011-07-16
        • 1970-01-01
        • 2011-03-16
        • 2017-06-21
        • 2017-09-23
        • 2018-10-22
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        相关资源
        最近更新 更多