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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 PHP
php生成静态页面的简单示例
Apr 17 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
Zend Framework数据库操作技巧总结
Feb 18 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加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
利用python批量检查网站的可用性
2016/09/09 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
详解python调用cmd命令三种方法
2019/07/08 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
详解python中的lambda与sorted函数
2020/09/04 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
商务会议邀请函
2014/01/09 职场文书
岗位聘任报告
2015/03/02 职场文书
员工工作表现自我评价
2015/03/06 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
夫妻吵架保证书
2015/05/08 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
2019旅游导游工作总结
2019/06/27 职场文书