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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
杏林同学录(四)
Oct 09 PHP
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
php session劫持和防范的方法
Nov 12 PHP
CodeIgniter使用phpcms模板引擎
Nov 12 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
PHP读取zip文件的方法示例
Nov 17 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
PHP explode()函数用法讲解
Feb 15 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
如何判断php数组的维度
2013/06/10 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python文件和文件夹复制函数
2020/02/07 Python
python与pycharm有何区别
2020/07/01 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
物业工作计划书
2014/01/10 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
不错的求职信范文
2014/07/20 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang