PHP实现检测客户端是否使用代理服务器及其匿名级别


Posted in PHP onJanuary 07, 2015

要判断客户端是否使用代理服务器,可以从客户端所发送的环境变量信息来判断。

具体来说,就是看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 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
坏狼的PHP学习教程之第2天
Jun 15 PHP
PHP取整数函数常用的四种方法小结
Jul 05 PHP
PHP进程同步代码实例
Feb 12 PHP
php中file_exists函数使用详解
May 08 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
利用php输出不同的心形图案
Apr 22 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
PHP命名空间简单用法示例
Dec 28 PHP
laravel配置Redis多个库的实现方法
Apr 10 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 #PHP
PHP中使用CURL获取页面title例子
Jan 07 #PHP
PHP中调用SVN命令更新网站方法
Jan 07 #PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 #PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 #PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 #PHP
PHP实现的简易版图片相似度比较
Jan 07 #PHP
You might like
使用apache模块rewrite_module (转)
2007/02/14 PHP
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
php格式化电话号码的方法
2015/04/24 PHP
php实现简单爬虫的开发
2016/03/28 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
布同 统计英文单词的个数的python代码
2011/03/13 Python
python处理json数据中的中文
2014/03/06 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
python 字典套字典或列表的示例
2019/12/16 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
三年级科学教学反思
2014/01/29 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
nginx优化的六点方法
2021/03/31 Servers
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL