【问题标题】:How to get public IP address of client sending the request using Nodejs express?如何获取使用 Nodejs express 发送请求的客户端的公共 IP 地址?
【发布时间】:2019-10-17 18:31:58
【问题描述】:

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

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

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

::ffff:192.168.1.2

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

【问题讨论】:

  • 连接到服务器的方式很重要。如果您在客户端中使用服务器的本地 IP 地址(假设它们在同一网络上),您将始终获得客户端的本地 IP。您需要通过它的公共互联网 IP 连接到您的服务器。
  • Ofc,您需要租用公共 IP 地址才能实现。
  • 如果你不这样做,你可以试试免费的隧道,比如 ngrok (google it)
  • 我在 heroku 中使用了(req.headers['x-forwarded-for'] || '').split(',')[0] || req.connection.remoteAddress,它给了我公共 IP 地址,所以你是对的

标签: node.js express


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我试过了,如果你想像这样在 express 上获得一个公共 ip:

    var ip = req.ip
        || req.connection.remoteAddress
        || req.socket.remoteAddress
        || req.connection.socket.remoteAddress;
    
    console.log(ip);
    

    【讨论】:

      【解决方案3】:

      你必须使用ip module

      npm install ip

      【讨论】:

      • 这没有给出公共 IP 地址
      猜你喜欢
      • 2016-12-02
      • 2023-03-19
      • 2014-12-08
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      相关资源
      最近更新 更多