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 相关文章推荐
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Jun 13 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
php动态生成函数示例
Mar 21 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
PHP一个简单的无需刷新爬虫
Jan 05 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 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
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
python中尾递归用法实例详解
2015/04/28 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
python移位运算的实现
2019/07/15 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
深入浅析Python代码规范性检测
2020/07/31 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
大学学习计划书范文
2014/05/02 职场文书
三下乡个人总结
2015/03/04 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL