首 页 行业资讯 新车 试驾评测 养车用车 车型库

php怎样获取用户真实ip?

发布网友 发布时间:2022-04-23 08:25

我来回答

2个回答

热心网友 时间:2022-04-06 09:20

获取客户端ip其实不是个简单的事儿,因为存在IP欺骗,和代理问题,所以获取客户端的IP的真实性会打折扣的,不能百分百准确。但是我们还是可以尽量写一些比较完善的获取客户端真正ip方法。使用php获取IP的方法能有很多,我简单给个例子:

<?php
function getip() { 
    $unknown = 'unknown'; 
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){ 
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    }elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)) { 
        $ip = $_SERVER['REMOTE_ADDR']; 
    } 
    /**
     * 处理多层代理的情况
     * 或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
     */
    if (false !== strpos($ip, ',')) $ip = reset(explode(',', $ip)); 
    return $ip; 

?>

1、没有使用代理的情况

    REMOTE_ADDR = 客户端IP
    HTTP_X_FORWARDED_FOR = 没数值或不显示

2、使用透明代理的情况

    REMOTE_ADDR = 最后一个代理服务器 IP
    HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:        221.5.252.160, 203.98.182.163, 203.129.72.215)
    这类代理服务器还是将客户端真实的IP发送给了访问对象,无法达到隐藏真实身份的目的.

3、使用普通的匿名代理

    REMOTE_ADDR = 最后一个代理服务器 IP
    HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似:        203.98.182.163, 203.98.182.163, 203.129.72.215)
    这种情况下隐藏了客户端的真实IP,但是向访问对象透露了客户端是使用代理服务器访问它        们的.

4、使用欺骗性代理服务器

    REMOTE_ADDR = 代理服务器 IP
    HTTP_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:                    220.4.251.159, 203.98.182.163, 203.129.72.215)
    这种情况下同样透露了客户端是使用了代理服务器,但编造了一个虚假的随机                            IP(220.4.251.159)代替客户端的真实IP来欺骗它.

5、使用高级匿名代理服务器

    REMOTE_ADDR = 代理服务器 IP
    HTTP_X_FORWARDED_FOR = 没数值或不显示,也可能是unknown

热心网友 时间:2022-04-06 10:38

$_SERVER 打印这个 你什么都看到了
还有一个函数可以获取客户的ip

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com