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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
php中常用编辑器推荐
Jan 02 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
PHP 引用文件技巧
Mar 02 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
thinkphp验证码显示不出来的解决方法
Mar 29 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
php注册审核重点解析(数据访问)
May 23 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数组
2006/10/09 PHP
php获取域名的google收录示例
2014/03/24 PHP
php的dl函数用法实例
2014/11/06 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
JS 创建对象的模式实例小结
2020/04/28 Javascript
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
python动态加载包的方法小结
2016/04/18 Python
Django框架验证码用法实例分析
2019/05/10 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Python 画出来六维图
2019/07/26 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
如何把python项目部署到linux服务器
2020/08/26 Python
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
应届实习生的自我评价范文
2014/01/05 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
小学班主任教育随笔
2015/08/15 职场文书
电台广播稿范文
2015/08/19 职场文书
《穷人》教学反思
2016/02/19 职场文书