某些客户端在 $_SERVER['REMOTE_ADDR'] 中带有冒号的“垃圾”IP 地址

Posted

技术标签:

【中文标题】某些客户端在 $_SERVER[\'REMOTE_ADDR\'] 中带有冒号的“垃圾”IP 地址【英文标题】:"Garbage" IP address with colons in $_SERVER['REMOTE_ADDR'] for some clients某些客户端在 $_SERVER['REMOTE_ADDR'] 中带有冒号的“垃圾”IP 地址 【发布时间】:2012-09-16 06:24:57 【问题描述】:

我有一个 php 脚本位于一台服务器上,根据每台机器上设置的 cronjobs,该脚本在一天中的不同时间被几台不同的机器访问。我想知道发出请求的机器的 IP,当它由浏览器发出时,以下命令成功执行:

<?php
  ...
  echo $_SERVER['REMOTE_ADDR'];
  ...
?>

但是,当由 CURL 或我尝试使用的任何其他命令行工具(包括 lynx)制作时,我最终会得到以下垃圾:

2701:5:4a80:7d:2ee:8eff:5e61:801d

根据我所做的调查,这是由于 Apache 没有为从命令行收到的请求填充 $_SERVER 变量。

REMOTE ADDR Issue with Cron Job

任何人都知道如何让命令行请求与$_SERVER 变量配合得很好,还是我应该走另一条路?

【问题讨论】:

【参考方案1】:

这不是垃圾,这是正确的远程地址。有人使用 IPv6 访问您的服务器。

【讨论】:

我的错 :-\ 知道如何获取相关的 IPv4 地址吗? @TMan,这是不可能的。 IPv4 和 IPv6 不一定要相互关联。 完美,感谢您的帮助!我猜我必须在客户端计算机上强制 IPv4 才能获得我正在寻找的地址? 检查 the accepted answer of this thread 以获取有关检查 IPv4 与 IPv6 地址的帮助...至少可以说这是一项棘手的业务 对于您现在开发的任何东西,最安全的前进方式是同时支持 IPv4 和 IPv6。您会在某个时间点同时遇到这两种情况,之后添加 IPv6 支持还有很多工作要做...

以上是关于某些客户端在 $_SERVER['REMOTE_ADDR'] 中带有冒号的“垃圾”IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

node-request - 获取错误“SSL23_GET_SERVER_HELLO:未知协议”

MSSql Server 剔除某些表进行备份

“多重定义”,“此处首先定义”错误

Parse Server - 某些用户是不是可以编辑其他用户的数据?

CS8: 客户遇到多台Server 2008 或者Server 2008R2 服务器网关无故丢失配置

php 服务器变量$_SERVER 服务器环境变量 $_ENV