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 相关文章推荐
JSON在PHP中的应用介绍
Sep 08 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
php生成zip文件类实例
Apr 07 PHP
百度地图API使用方法详解
Aug 25 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
laravel框架创建授权策略实例分析
Nov 22 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php session和cookie使用说明
2010/04/07 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
Element InputNumber计数器的使用方法
2020/07/27 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
python中enumerate的用法实例解析
2014/08/18 Python
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
Python读写ini文件的方法
2015/05/28 Python
Django框架模板的使用方法示例
2019/05/25 Python
Python3简单实现串口通信的方法
2019/06/12 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
Python 没有main函数的原因
2020/07/10 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
庆祝教师节演讲稿
2014/09/03 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
学生退学证明
2015/06/23 职场文书