如何使用Nodejs express获取发送请求的客户端的公共IP地址?

jed*_*edu 1 node.js express

我想使用 Nodejs express 获取客户端的公共 IP 地址。我在网上搜索了导致我使用这个问题的问题:

var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
    console.log(ip)
Run Code Online (Sandbox Code Playgroud)

但是,在我的控制台中,我得到

::ffff:192.168.1.2

这是我的本地 IP 地址而不是公共 IP 地址

Tom*_*mas 5

您的代码实际上是正确的。它不适合您的原因有两个:

  1. req.connection.remoteAddress显示请求者的 IP 地址。在您的情况下,您的节点正在侦听私有 ip 地址,因此唯一可以联系您的服务器的外部 ip 地址是另一台在同一私有 ip 范围内工作的计算机。为您的节点实例使用公共 IP 地址将解决该问题。

  2. req.headers['x-forwarded-for']只有在请求中存在标头时才能工作。通常情况下,当您有一个代理(某些 http 服务器 - nginx、apache ...)侦听公共网络并将通信中继到只能从专用网络访问的节点服务器时。这个代理将x-forwarded-for使用原始客户端的IP地址向请求添加标头。在您的情况下,您没有代理或代理未配置为执行此操作。没有更多的信息是不可能确切地说。