获取 node.js 应用程序的公共 IP 地址

Posted

技术标签:

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

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

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

谢谢:)

【问题讨论】:

hacksparrow.com/node-js-get-ip-address.html 当我使用 var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;在 http.createServer(function(req,res) );它说 TypeError: Object # has no method 'header'。你发给我的链接是不是过期了??? 这样不显示IP,只会报错 我不断得到 IPv4 IPv4 是公共地址,它是您链接中显示的内容。你到底在期待什么,你能发布一个期望值的例子吗? 【参考方案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-ip,https://***.com/a/24608249/823548)

【讨论】:

我看到了那个模块,但我并没有试图找到服务器计算机的公共 ip,我正在尝试为客户端计算机获取它

以上是关于获取 node.js 应用程序的公共 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 中获取本地 IP 地址

使用 JavaScript/Node.js 从 IP 地址获取两个字母的大陆代码

如何在Node.js中获取本机本地IP地址

如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?

Node.js - 在 Amazon EC2 上获取主机 IP 地址

node.js获取本机IP地址