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实现定时生成HTML网站首页实例代码
Nov 20 PHP
PHP 类商品秒杀计时实现代码
May 05 PHP
PHP字符串的连接的简单实例
Dec 30 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP使用SOAP调用API操作示例
Dec 25 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/03/04 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
php实现Session存储到Redis
2015/11/11 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
jQuery DOM操作小结与实例
2010/01/07 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
广州盈通面试题
2015/12/05 面试题
幼教个人求职信范文
2013/12/02 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
入党积极分子个人总结
2015/03/02 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL