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编程之高级技巧——利用Mysql函数
Oct 09 PHP
PHP小程序自动提交到自助友情连接
Nov 24 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
PHP修改session_id示例代码
Jan 08 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
33道php常见面试题及答案
Jul 06 PHP
浅谈php7的重大新特性
Oct 23 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
PHP PDOStatement::bindParam讲解
Jan 30 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
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
django使用graphql的实例
2020/09/02 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
什么是唯一索引
2015/07/05 面试题
什么是GWT的Entry Point
2013/08/16 面试题
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
会计稽核岗位职责
2015/04/13 职场文书
可可西里观后感
2015/06/08 职场文书
光荣之路观后感
2015/06/12 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书