IP地址奇怪的组合

时间:2020-10-05 08:22:26

标签: php ip real-ip

美好的一天,

我在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 AND 172.69.55.30

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

我想知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

“键”的顺序很重要。因此,即使您确实需要远程地址,您也常常以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地址,也可以采用最后一个作为连接通过的最后一个代理。