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 相关文章推荐
Smarty模板快速入门
Jan 04 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
PHP中实现中文字符进制转换原理分析
Dec 06 PHP
PHP生成Gif图片验证码
Oct 27 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
php页面缓存方法小结
Jan 10 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 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 SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
php从字符串创建函数的方法
2015/03/16 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
js页面跳转的常用方法整理
2013/10/18 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
python解析xml文件操作实例
2014/10/05 Python
复习Python中的字符串知识点
2015/04/14 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
C#实现启动一个进程
2016/10/01 面试题
毕业生自荐信
2013/12/14 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
产品质量保证书
2014/04/29 职场文书
党员评议自我评价
2015/03/03 职场文书
捐款通知怎么写
2015/04/24 职场文书
女方家长婚礼致辞
2015/07/27 职场文书