在 PHP 中以 "for" 开头的未知 IP 值



我为我的网站创建了统计数据,其中正在收集每日唯一视图和总视图。在非隐蔽的视图中,我正在收集所有的IPS。

我注意到一件很奇怪的事情。某些条目具有如下所示的 IP 值

for="105.6.218.225:32174"
for="[2405:204:c10f:3307::183d:38a4]"

我用 php 获得 Ips,如下所示

$ipaddress = '';
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
    $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
}else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); 
    foreach ($iplist as $ip){
        $ipaddress = $ip;
    }
}else if(!empty($_SERVER['HTTP_X_FORWARDED'])){
    $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
}else if(!empty($_SERVER['HTTP_FORWARDED_FOR'])){
    $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
}else if(!empty($_SERVER['HTTP_FORWARDED'])){
    $ipaddress = $_SERVER['HTTP_FORWARDED'];
}else{
    $ipaddress = $_SERVER['REMOTE_ADDR'];
}
return $ipaddress;

那么这个字符串是什么意思呢?是机器人抓取我的网站还是其他东西?

提前谢谢。

RFC 7239 Forwarded标头不遵循预期的X-Forwarded-For标头格式。相反,它遵循以下格式:

Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43

您可能只想获取for键值对并剥离for=部分,而不仅仅是获取完整的字符串。例如,你可以通过=来进一步explode字符串,检查第一部分是否for,如果是,则使用第二部分作为IP。