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 相关文章推荐
一个简单实现多条件查询的例子
Oct 09 PHP
php你的验证码安全码?
Jan 02 PHP
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
php目录操作实例代码
Feb 21 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
PHP代码加密的方法总结
Mar 13 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
服务器端解压缩zip的脚本
2006/12/22 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP二维数组去重算法
2016/12/17 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
自写的一个jQuery圆角插件
2010/10/26 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
Python语言生成水仙花数代码示例
2017/12/18 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
原生python实现knn分类算法
2019/10/24 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
database面试题
2013/03/28 面试题
工程专业求职自荐书范文
2014/02/18 职场文书
个人函授自我鉴定
2014/03/25 职场文书
学校工作推荐信范文
2014/07/11 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
爱心捐助活动总结
2015/05/09 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers