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手册及PHP编程标准
Dec 17 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
PHP设计模式之装饰者模式
Feb 29 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
调整PHP的性能
Oct 30 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
php中strtotime函数性能分析
Nov 20 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
php源码的使用方法讲解
Sep 26 PHP
php数组指针函数功能及用法示例
Feb 11 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
一个简单的PHP入门源程序
2006/10/09 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
Python实现注册登录系统
2017/08/08 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
死亡证明书样本说明
2014/10/18 职场文书
认真学习保证书
2015/02/26 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
会议通知范文
2015/04/15 职场文书
幼儿园中班班级总结
2015/08/10 职场文书