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
第十一节--重载
Nov 16 PHP
php md5下16位和32位的实现代码
Apr 09 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
Memcached介绍及php-memcache扩展安装
Apr 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
php对数组内元素进行随机调换的方法
2015/05/12 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
javascript回调函数详解
2018/02/06 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
2020/06/17 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python实现代码行数统计示例分享
2014/02/10 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
python3中property使用方法详解
2019/04/23 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
学习自我鉴定
2014/02/01 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang