PHP实现检测客户端是否使用代理服务器及其匿名级别


Posted in PHP onJanuary 07, 2015

要判断客户端是否使用代理服务器,可以从客户端所发送的环境变量信息来判断。

具体来说,就是看HTTP_VIA字段,如果这个字段设置了,说明客户端使用了代理服务器。

匿名级别可以参考下表来判断。

给出一个应用例子,可以挂上代理试试效果: http://ip.mixsec.org/

一、没有使用代理服务器的情况:

     REMOTE_ADDR = 您的 IP
     HTTP_VIA = 没数值或不显示
     HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

    REMOTE_ADDR = 代理服务器 IP
    HTTP_VIA = 代理服务器 IP (补充:这个字段由代理服务器填充,有时会填充网关信息等)
    HTTP_X_FORWARDED_FOR = 您的真实 IP
    这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

    REMOTE_ADDR = 代理服务器 IP
    HTTP_VIA = 代理服务器 IP (补充:这个字段由代理服务器填充,有时会填充网关信息等)
    HTTP_X_FORWARDED_FOR = 代理服务器 IP
    隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

    REMOTE_ADDR = 代理服务器 IP
    HTTP_VIA = 代理服务器 IP  (补充:这个字段由代理服务器填充,有时会填充网关信息等)
    HTTP_X_FORWARDED_FOR = 随机的 IP
    告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies

   REMOTE_ADDR = 代理服务器 IP
   HTTP_VIA = 没数值或不显示
   HTTP_X_FORWARDED_FOR = 没数值或不显示
   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

除此之外,可以通过proxy judges总 结其他一些可供参考的判定信息,一遍于在实践中加以利用。

最后写一个php例子,仅供大家参考:

if(!empty($_SERVER['HTTP_VIA']))    //使用了代理

{

    if(!isset($_SERVER['HTTP_X_FORWARDED_FOR']))

    {

        //Anonymous Proxies    普通匿名代理服务器

        //代理IP地址为 $_SERVER['REMOTE_ADDR']

   }

   else

   {

        //Transparent Proxies 透明代理服务器

        //代理IP地址为 $_SERVER['REMOTE_ADDR']

        //真实ip地址为 $_SERVER['HTTP_X_FORWARDED_FOR']

   }

}

else    //没有代理或者是高匿名代理

{

    //真实ip地址为 $_SERVER['REMOTE_ADDR']

}
PHP 相关文章推荐
在PHP中利用XML技术构造远程服务(下)
Oct 09 PHP
php实现文件下载更能介绍
Nov 23 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
php中 ob_start等函数截取标准输出的方法
Jun 22 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 #PHP
PHP中使用CURL获取页面title例子
Jan 07 #PHP
PHP中调用SVN命令更新网站方法
Jan 07 #PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 #PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 #PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 #PHP
PHP实现的简易版图片相似度比较
Jan 07 #PHP
You might like
PHP 递归效率分析
2009/11/24 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
ejs v9 javascript模板系统
2012/03/21 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python微信好友数据分析详解
2018/11/19 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Python修改DBF文件指定列
2020/12/19 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
电气技术员岗位职责
2013/11/19 职场文书
关于工作经历的证明书
2014/10/11 职场文书
安全生产会议制度
2015/08/06 职场文书
2016七夕情人节感言
2015/12/09 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python