【问题标题】:IP address strange combinationIP地址奇怪的组合
【发布时间】:2020-10-05 08:22:26
【问题描述】:

早安,

我在PHP中使用以下代码获取IP地址:

    $IPkey = array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR');

    foreach($IPkey as $name){
        if(isset($_SERVER[$name])) return $_SERVER[$name];
    }

现在有了一个客户,我得到了非常尴尬的结果。

我突然得到以下结果:

  • 2001:1c04:3403:9bf0:a8a6:2d21:8006:159, 172.69.55.30
  • 2001:1c04:3403:9bf0:a8a6:2d21:8006:159, 162.158.111.183
  • 2001:1c04:3403:9bf0:a8a6:2d21:8006:159, 141.101.105.236
  • 2001:1c04:3403:9bf0:a8a6:2d21:8006:159, 172.69.55.208
  • 2001:1c04:3403:9bf0:a8a6:2d21:8006:159, 172.69.55.209

客户声称他仅在一台 PC 上使用该系统。我当然敢怀疑这种说法。

但我根本无法理解这些 IP 地址。 这就像一个 IPv4 地址附加到一个 IPv6 地址。

我希望有人能告诉我他们的真实 IP 是什么,这是他们粘贴到路由器地址的内部地址吗?以及如何避免这种情况?

编辑:我会再次尝试解释。我使用上面提到的代码来获取IP地址。

现在我得到的结果如下所示。看起来我 意思是:

2001:1c04:3403:9bf0:a8a6:2d21:8006:159 172.69.55.30

但我得到一个完整的字符串:2001:1c04:3403:9bf0:a8a6:2d21:8006:159, 172.69.55.30 像这样是 IP 地址。在我看来不太可能。但这仍然是返回给我的内容。

我想知道这是为什么?

【问题讨论】:

    标签: php ip real-ip


    【解决方案1】:

    “键”的顺序很重要。因此,即使您确实需要远程地址,您也更有可能最终得到HTTP_X_FORWARDED_FOR。我想这就是你正在看的那个。它的值是与 HTTP 请求一起发送的 HTTP 标头的值。

    HTTP_X_FORWARDED_FOR 可以包含多个 IP 地址。当一个请求通过多个代理服务器链接时,每个代理都应将前一个代理的 IP 添加到现有的 X-Forwarded-For 标头中,以便保留整个链。语法是:

    X-Forwarded-For: <client>, <proxy1>, <proxy2>
    

    见:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For

    由于 IPv4 和 IPv6 地址都不包含逗号,您可以查找逗号以查看您是否有多个 IP 地址。如果这样做,您可以使用第一个,即客户端计算机的 IP 地址,或者最后一个,即连接所经过的最后一个代理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多