PHP实例分享判断客户端是否使用代理服务器及其匿名级别


Posted in PHP onJune 04, 2014

要判断客户端是否使用代理服务器,可以从客户端所发送的环境变量信息来判断。

具体来说,就是看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循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
基于PHP异步执行的常用方式详解
Jun 03 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
Yii学习总结之安装配置
Feb 22 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
phpstudy隐藏index.php的方法
Sep 21 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 #PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 #PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 #PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 #PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 #PHP
php 批量添加多行文本框textarea一行一个
Jun 03 #PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 #PHP
You might like
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
Python应用库大全总结
2018/05/30 Python
浅谈Python基础—判断和循环
2019/03/22 Python
django云端留言板实例详解
2019/07/22 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
数据库笔试题
2013/05/09 面试题
学校门卫岗位职责范本
2014/06/30 职场文书
男生贾里读书笔记
2015/06/30 职场文书
民事纠纷协议书
2016/03/23 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android