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 相关文章推荐
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
php中autoload的用法总结
Nov 08 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
Nov 22 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
20个PHP常用类库小结
2011/09/11 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
把pandas转换int型为str型的方法
2019/01/29 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
python 制作本地应用搜索工具
2021/02/27 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
幼儿教师考核制度
2014/01/25 职场文书
2014村务公开实施方案
2014/02/25 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
诉讼授权委托书
2014/10/15 职场文书
毕业生个人总结
2015/02/28 职场文书
工作失职检讨书范文
2015/05/05 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书