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 和 XML: 使用expat函数(二)
Oct 09 PHP
让你同时上传 1000 个文件 (二)
Oct 09 PHP
PHP 图片上传代码
Sep 13 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
PHP+swoole实现简单多人在线聊天群发
Jan 19 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP 无限级分类
May 04 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
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
jquery replace方法去空格
2017/05/08 jQuery
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
python 项目目录结构设置
2020/02/14 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
美国时尚女装在线:Missguided
2016/12/03 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
中学老师的自我评价
2013/11/07 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
门球健将观后感
2015/06/16 职场文书
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android