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漏洞小结
Feb 05 PHP
解析php函数method_exists()与is_callable()的区别
Jun 21 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
PHP文件操作方法汇总
Jul 01 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
CI框架数据库查询之join用法分析
May 18 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
php 可变函数使用小结
Jun 12 PHP
PHP实现一个轻量级容器的方法
Jan 28 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP中使用curl入门教程
2015/07/02 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
javascript 禁止复制网页
2009/06/11 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
python 输出一个两行字符的变量
2009/02/05 Python
python实现读取命令行参数的方法
2015/05/22 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
图解Python变量与赋值
2018/04/03 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
python操作yaml说明
2020/04/08 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
浅析python实现动态规划背包问题
2020/12/31 Python
python 装饰器重要在哪
2021/02/14 Python
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
业务部门经理岗位职责
2014/02/23 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
英语教师求职信
2014/06/16 职场文书
冰峪沟导游词
2015/02/09 职场文书
技能培训通讯稿
2015/07/18 职场文书
2016五一手机促销广告语
2016/01/28 职场文书