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 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
我的论坛源代码(一)
Oct 09 PHP
adodb与adodb_lite之比较
Dec 31 PHP
PHP session会话的安全性分析
Sep 08 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 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的错误信息
2006/10/09 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
图片自动缩小 点击放大
2008/07/07 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
详解微信UnionID作用
2019/05/15 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
python利用beautifulSoup实现爬虫
2014/09/29 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
基于Python os模块常用命令介绍
2017/11/03 Python
Windows下安装Scrapy
2018/10/17 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
大学运动会通讯稿
2014/01/28 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
自主招生教师推荐信
2014/05/10 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
php实例化对象的实例方法
2021/11/17 PHP
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL