笔记-HTTP代理

1.      基本原理

所谓代理,一个重要的目的是身份伪装,让被访问端无法正辨识访问者的身份。

那么下一个问题是服务器从哪些信息上来识别访问端的身份。

以php http服务器为例:

REMOTE_ADDR:访问客户端的IP地址

HTTP_VIA:如果有该条信息,就证明您使用了代理服务器,代理服务器的地址就是后面的数值。

HTTP_X_FORWARDED_FO:如果有该条信息,也证明了您使用了代理服务器代理服务器的地址就是后面的数值。

HTTP_ACCEPT_LANGUAGE:您浏览器所使用的语言集

HTTP_USER_AGENT:对大多数浏览器而言,这个值一般是Mozilla.可能还会包括浏览器的类型和版本号以及操作系统信息。

HTTP_HOST:网页服务器名称

1.1.    代理种类

代理有不同的级别,从无伪装到完全伪装。

使用不同种类代理服务器,上面的信息会有所不同:

  1. 没有使用代理服务器:

REMOTE_ADDR=您的IP

HTTP_VIA=没数值或不显示

HTTP_X_FORWARDED_FOR=没数值或不显示

  1. 透明代理服务器:TransparentProxies

REMOTE_ADDR=代理服务器IP

HTTP_VIA=代理服务器IP

HTTP_X_FORWARDED_FOR=您的真实IP

这类代理服务器还是将访问信息转发给访问对象,无法隐藏真实身份。

  1. 普通匿名代理服务器的情况:AnonymousProxies

REMOTE_ADDR=代理服务器IP

HTTP_VIA=代理服务器IP

HTTP_X_FORWARDED_FOR=代理服务器IP

隐藏了真实IP,但是向访问对象透露了使用代理服务器访问。

  1. 欺骗性代理:DistortingProxies

REMOTE_ADDR=代理服务器IP

HTTP_VIA=代理服务器IP

HTTP_X_FORWARDED_FOR=随机的IP

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

  1. 高匿名代理:HighAnonymityProxies(Eliteproxies)

REMOTE_ADDR=代理服务器IP

HTTP_VIA=没数值或不显示

HTTP_X_FORWARDED_FOR=没数值或不显示

完全用代理服务器的信息替代了所有信息,就象是完全使用那台代理服务器直接访问对象。

2.      代理识别方法

代理识别可以从两个角度来考虑,首先是从客户端发过来的数据包头中去提取信息并验证身份,不过这种方式容易破解;第二种则是反向探测客户端,毕竟代理终归是服务器,其特征与个人终端有很大的不同。

下面列出了常见的代理识别方法:

  1. 反向探测技术:扫描IP是不是开通了80,8080等代理服务器经常开通的端口,一个普通的用户IP不太可能开通如上的端口;
  2. HTTP头部的X_Forward_For:开通了HTTP代理的IP可以通过此法来识别是不是代理,如果带有XFF信息,说明该IP是代理IP无疑;
  3. Keep-alive报文:如果带有Proxy-Connection的Keep-alive报文,号位疑问该IP是代理IP;
  4. 查看同一来访IP端口:如果一个IP中有的端口大于10000,那么该IP大多也存在问题。
  5. 其它信息,还有浏览器版本,操作系统版本,使用语言,COOKIE,机器名,登录用户名等等,如果IP一换再换,其他信息却从未变过,也是代理了。

笔记-HTTP代理的更多相关文章

  1. Java学习笔记——动态代理

    所谓动态,也就是说这个东西是可变的,或者说不是一生下来就有的.提到动态就不得不说静态,静态代理,个人觉得是指一个代理在程序中是事先写好的,不能变的,就像上一篇"Java学习笔记——RMI&q ...

  2. nodejs爬虫笔记(二)---代理设置

    node爬虫代理设置 最近想爬取YouTube上面的视频信息,利用nodejs爬虫笔记(一)的方法,代码和错误如下 var request = require('request'); var chee ...

  3. HTTP权威协议笔记-6.代理

    6.1 Web的中间实体 Http的代理服务器即是客户端的服务器又是服务器的客户端. 它介于服务器与客户端之间,当客户端发送请求报文经过它时,它会像服务器一样正确的处理请求和返回响应,同时,代理服务器 ...

  4. OS笔记047代理传值和block传值

    在两个不同的控制器之间传递数据,可以使用代理传值或者block传值. 例子是一个简单通讯录. 主界面如下: 添加联系人界面 查看/编辑联系人界面:默认是查看模式,点击编辑后进入编辑模式 编辑模式 数据 ...

  5. 《JavaScript设计模式与开发实践》读书笔记之代理模式

    1.代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问 1.1 一般的图片加载 var myImage=(function () { var imgNode=document.c ...

  6. Java学习笔记--动态代理

    动态代理 1.JDK动态代理 JDK1.3之后,Java提供了动态代理的技术,允许开发者在运行期创建接口的代理实例.JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy ...

  7. Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)

    1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...

  8. Java笔记--动态代理

    Java动态代理 1.概念 代理: 有时我们并不想直接访问对象A,或者不能直接访问对象A.而是通过访问一个中间对象B,让中间对象B去访问A.这种方式就称为代理. 这里的对象A所属的类就为委托类,或者被 ...

  9. js学习笔记---事件代理

    事件机制可以分为捕获型和冒泡型.捕获型是事件由父级元素(DOM)传递到子元素.冒泡型正好相反.事件机制默认为冒泡型.事件机制可以通过参数指定. 事件委托可以将我们绑定在document上的事件自动绑定 ...

随机推荐

  1. 《C#高效编程》读书笔记06-理解几个等同性判断之间的关系

    当创建自定义类型时(无论是class还是struct),应为类型定义"等同性"的含义.C#提供了4种不同的函数来判断两个对象是否"相等": public sta ...

  2. Spring之Quartz定时任务和Cron表达式详解

    1.定时业务逻辑类 public class ExpireJobTask { /** Logger */ private static final Logger logger = LoggerFact ...

  3. js重载的实现

    在JavaScript高级程序设计书中看到 ECMAScript函数中不能想传统意义上那样实现重载.而在其他语句中(Java)中,可以为一个函数编写两个定义,只要两个定义的签名(接受的参 数的类型和数 ...

  4. node安装启动服务

    一.下载安装包: node下载地址:https://nodejs.org/en/download/,根据自己电脑的配置下载相应的windows64位安装包,下载完成后,进行安装.下面我用的8.9.0版 ...

  5. Android自定义控件练手——简单的时钟

    首先这应该是一个老生常谈的设计了,但是毕竟身为小白的自己都没动手做过,不动手怎么提高自己呢,所以在这梅林沉船闲暇之际,我就把我的设计流程与思路记录下来.首先来看看效果图吧: 如上图就是一个简单并没有美 ...

  6. ubuntu14.04安装gradle

    一.下载gradle $ wget https:////services.gradle.org/distributions/gradle-3.5.1-all.zip $ sudo unzip grad ...

  7. hbase查询语法

    1.scan '表名',{FILTER=>"PrefixFilter('rowkey值')"} scan 'useractions',{FILTER=>"Pr ...

  8. webstorm下载激活汉化

    下载 官方下载地址:https://www.jetbrains.com/webstorm/ 激活 参考http://blog.csdn.net/it_talk/article/details/5244 ...

  9. SQL 使用触发器常见错误

    今天做代码审查时,看见以下一段触发器的创建脚本,我们一起来分析一下 create trigger [trigger_puClassRoomType] on [dbo].[puClassRoomType ...

  10. hihocoder 1080 线段树(区间更新)

    题目链接:http://hihocoder.com/problemset/problem/1080 , 两种操作的线段树(区间更新). 这道题前一段时间一直卡着我,当时也是基础不扎实做不出来,今天又想 ...