【问题标题】:Why is IP shown as ::1 in local environment?为什么IP在本地环境中显示为::1?
【发布时间】:2016-10-08 13:16:12
【问题描述】:

我正在开发一个 PHP 应用程序并使用 $_SERVER['REMOTE_ADDR'] 将用户的 IP 地址存储在数据库中

这将在本地环境中返回 ::1(Apache 在 macOS Sierra 上本地设置)。

我从以前的帖子中了解到,这是因为我的 ISP 没有“往返”。但是有什么方法可以对此进行测试,即确保代码$_SERVER['REMOTE_ADDR'] 将在应用程序部署到实时(非本地)托管环境后返回正确的地址?

我所追求的效果是获得我的“真实”出站 IP 地址,就像我访问像 http://www.whatsmyip.org/ 这样的网站时所显示的那样

我正在构建的应用程序在存储到数据库后还会显示用户的 IP 地址。那么作为第二个问题,如果我要编写逻辑来过滤掉本地 IP 不被显示,我应该过滤掉 ::1127.0.0.1,还是还有其他的?

【问题讨论】:

  • 由于主机不同,因此对此没有很好的答案。您使用的是什么托管服务?

标签: php apache


【解决方案1】:

::1 是您在 IPv6 中的“家”地址,就像127.0.0.1 在 IPv4 中一样

https://en.wikipedia.org/wiki/IPv6_address

::1/128 — 环回地址是单播 localhost 地址。如果主机中的应用程序将数据包发送到此地址,IPv6 堆栈会将这些数据包循环回同一虚拟接口(对应于 IPv4 中的 127.0.0.1/8)。

获取“真实”出站地址的问题是您的本地计算机可能不知道那是什么。例如,亚马逊网络服务有一个控制平面,您的服务器实际上位于其中。因此,您机器的 IP 位于该控制平面内,而不是互联网。您可以为其分配一个外部 IP,但您的机器没有内部方法可以找到该 IP。您实际上必须 perform other actions(特定于 AWS)才能获得它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2016-05-14
    • 2016-10-24
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多