我正在开发一个PHP应用程序,并使用$_SERVER['REMOTE_ADDR']
这会在本地环境中返回::1
(Apache在macOS Sierra上本地设置)。
我从以前的帖子中了解到,这是因为没有"往返"到我的ISP。但有没有办法测试这个,即确保代码$_SERVER['REMOTE_ADDR']
在应用程序部署到实时(非本地)托管环境后返回正确的地址?
我以后的效果是让我的真实"真实"出站IP地址,如我访问http://www.whatsmyip.org/
等网站时所显示的内容我构建的应用程序还会在用户存储在数据库中后显示该用户的IP地址。所以作为第二个问题,如果我要编写逻辑来过滤掉显示的本地IP,我应该过滤掉::1
和127.0.0.1
,还是还有其他人?
答案 0 :(得分:0)
::1
是您在IPv6中的“家庭”地址,就像127.0.0.1
在IPv4中一样
https://en.wikipedia.org/wiki/IPv6_address
:: 1/128 - 环回地址是单播本地主机地址。如果主机中的应用程序将数据包发送到此地址,则IPv6堆栈将在相同的虚拟接口上回送这些数据包(对应于IPv4中的127.0.0.1/8)。
获取“真正的”出站地址的问题是您的本地计算机可能不知道它是什么。例如,Amazon Web Services有一个服务器实际存在的控制平面。因此,您的计算机的IP位于该控制平面内,而不是Internet。您可以为其分配外部IP,但机器没有内部方式来查找该IP。您实际上必须perform other actions(特定于AWS)才能获得它。