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 相关文章推荐
openPNE常用方法分享
Nov 29 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
Dec 25 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
php处理json格式数据经典案例总结
May 19 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
PHP反射原理与用法深入分析
Sep 28 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截取后台登陆密码的代码
2012/05/05 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
Python编程实现使用线性回归预测数据
2017/12/07 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
python 进程的几种创建方式详解
2019/08/29 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
详解如何修改python中字典的键和值
2020/09/29 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
2013英文求职信模板范文
2013/11/15 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
党支部四风整改方案
2014/10/25 职场文书
2014年班组工作总结
2014/11/20 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
python的html标准库
2022/04/29 Python