为什么本地环境中IP显示为::1 ?

  • 本文关键字:显示 IP 环境 php apache
  • 更新时间 :
  • 英文 :


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

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

我从以前的帖子中理解这是因为没有"往返"到我的ISP。但是,是否有任何方法来测试这一点,即确保代码$_SERVER['REMOTE_ADDR']将返回正确的地址,一旦应用程序已部署到一个活动(不是本地)托管环境?

我所追求的效果是得到我的"真实"出站IP地址,如在什么将显示,如果我访问一个网站,如http://www.whatsmyip.org/

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

::1在IPv6中是你的"home"地址,就像127.0.0.1在IPv4中一样

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

::1/128—loopback地址是本地主机的单播地址。如果主机上的一个应用程序向这个地址发送数据包,IPv6栈将把这些数据包循环回同一个虚拟接口(对应IPv4中的127.0.0.1/8)。

获取"真实"出站地址的问题是您的本地机器可能不知道这是什么。例如,Amazon Web Services有一个服务器实际所在的控制平面。所以你的机器的IP在那个控制平面内,而不是因特网。你可以给它分配一个外部IP,但是你的机器没有办法找到这个IP。实际上,您必须执行其他操作(特定于AWS)才能获得它。

最新更新