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 相关文章推荐
PHP配置心得包含MYSQL5乱码解决
Nov 20 PHP
PHP 开发环境配置(测试开发环境)
Apr 28 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
php解决约瑟夫环示例
Apr 09 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
Sep 26 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
laravel 执行迁移回滚示例
Oct 23 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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提取中文首字母
2008/04/09 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
webpack4简单入门实例
2018/09/06 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
python获取糗百图片代码实例
2013/12/18 Python
一个超级简单的python web程序
2014/09/11 Python
python读取和保存视频文件
2018/04/16 Python
Python列表元素常见操作简单示例
2019/10/25 Python
Python中six模块基础用法
2019/12/08 Python
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
信息科学与技术专业求职信范文
2014/02/20 职场文书
家长会主持词开场白
2014/03/18 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
社区文艺活动方案
2014/08/19 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技