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中如何调用用户自定义函数
Aug 06 PHP
php获取操作系统语言代码
Nov 04 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
PHP安装memcached扩展笔记
May 28 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
php日期操作技巧小结
Jun 25 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
Laravel框架搜索分页功能示例
Feb 01 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python插入排序算法的实现代码
2013/11/21 Python
基于Python实现文件大小输出
2016/01/11 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python类的继承super相关原理解析
2020/10/22 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
暑期研修感言
2014/02/17 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
幼儿园个人总结
2015/02/28 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书