PHP 获取客户端ip地址几种情况分析

字号+ 作者:alpha 来源:www.seoalphas.com 2018-02-04 08:53 浏览次数(376)

一、如果没有使用代理服务器

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

  

$ip = $_SERVER['REMOTE_ADDR'];


二、使用透明代理

  REMOTE_ADDR = 最后一个代理服务器 IP

  HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:221.5.252.160, 203.98.182.163, 203.129.72.215)

  这类代理还会将客户真实ip发送到请求对象,无法隐藏真实ip。

 $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];


三、使用普通匿名代理服务器

  REMOTE_ADDR = 最后一个代理服务器 IP

  HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似:203.98.182.163, 203.98.182.163, 203.129.72.215)

  这样就隐藏了客户端的真实ip,但服务器会知道客户端是通过代理服务器去访问的。


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

  REMOTE_ADDR = 代理服务器 IP

  HTTP_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:220.4.251.159, 203.98.182.163, 203.129.72.215)

  服务器可以识别到时通过代理服务器访问的,但发送给目标服务器的是虚假ip。


五、使用高匿名代理

  REMOTE_ADDR = 代理服务器 IP       HTTP_X_FORWARDED_FOR = 没数值或不显示

  使用这种代理时,不同浏览器不同设备会返回不同的ip头信息,因此PHP使用$_SERVER["REMOTE_ADDR"] 、$_SERVER["HTTP_X_FORWARDED_FOR"] 获取的值可能是空值也可能是“unknown”值。

PHP获取ip代码如下:

public function ip() {
    //strcasecmp 比较两个字符,不区分大小写。返回0,>0,<0。
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $ip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    $res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
    echo $res;
    //dump(phpinfo());//所有PHP配置信息
}


标签

本站部分技术文章为参考网上实用内容发布,目的是记录踩坑经验,若未备注来源而侵犯了您原创文章权益,请联系博主删除;对文章有不同看法的朋友欢迎在评论区留言互动

相关文章
  • PHP正则匹配汉字字符/中文字符 指定字符长度

    PHP正则匹配汉字字符/中文字符 指定字符长度

    浏览次数:664

  • 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作

    如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作

    浏览次数:623

  • PHPstorm could not list the contents of folder 的解决方案

    PHPstorm could not list the contents of folder 的解决方案

    浏览次数:548

  • php在线考试系统 附源码(一)

    php在线考试系统 附源码(一)

    浏览次数:545

  • php防止别人恶意刷新页面的代码

    php防止别人恶意刷新页面的代码

    浏览次数:542

  • PHP json_encode() 函数介绍 兼容中文

    PHP json_encode() 函数介绍 兼容中文

    浏览次数:489

  • PHPstorm  could not list the contents of folder 的解决方案

    PHPstorm could not list the contents of folder 的解决方案

    浏览次数:480

  • pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)

    pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)

    浏览次数:408

网友点评
功能开发中......其实是博主懒了而已......
0.765625s