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带密码功能并下载远程文件保存本地指定目录 修改加强版
May 16 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
mysql数据库差异比较的PHP代码
Feb 05 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
PHP实现的增强性mhash函数
May 27 PHP
php使用array_search函数实现数组查找的方法
Jun 12 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Python shutil模块用法实例分析
2019/10/02 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
标准化管理实施方案
2014/02/25 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
高三英语教学计划
2015/01/23 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
nginx配置之并发频次限制
2022/04/18 Servers
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL