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 相关文章推荐
Windows PHP5和Apache的安装与配置
Jun 08 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
浅析php数据类型转换
Jan 09 PHP
php的ZipArchive类用法实例
Oct 20 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
php如何获取文件的扩展名
Oct 28 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
php compact 通过变量创建数组
Nov 15 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 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中PDO方式实现数据库的增删改查
2015/05/17 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
php中strtotime函数性能分析
2016/11/20 PHP
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
python数据抓取3种方法总结
2021/02/07 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
高中毕业生自我鉴定范文
2013/09/26 职场文书
化妆师职业生涯规划书
2014/02/16 职场文书
服务质量承诺书
2014/03/27 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
护士个人总结范文
2015/02/13 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书