笔记-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. JavaSE_3_面向对象

    1.wait方法底层原理 wait是object中的方法,可以暂停线程,会释放对象锁,不像sleep方法,线程休眠期依然持有锁,通过调用notify或notifyAll方法唤醒线程. lock.wai ...

  2. [LeetCode]9. Palindrome Number回文数

    Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same back ...

  3. 观察者模式(Observe Pattern)

    观察者模式: 当对象存在一对多关系时,使用观察者模式(Observe Pattern).例如:当一个对象被修改时,会通知它的依赖对象. 介绍: 1.意图:定义对象的一种一对多的依赖关系,当一个对象的状 ...

  4. WPF中的StackPanel、WrapPanel、DockPanel(转)

    一.StackPanel StackPanel是以堆叠的方式显示其中的控件 1.可以使用Orientation属性更改堆叠的顺序 Orientation="Vertical" 默认 ...

  5. TestNG并发测试包

    https://www.yiibai.com/testng/basic-annotations.html

  6. 如何在InstallShield的MSI工程中调用Merge Module的Custom Action

    使用InstallShield创建了合并模块安装程序,定义自定义活动,可如何调用却不太清楚,网上也就找到这点信息,还是没有成功,到底该在什么地方执行合并模块的自定义活动? http://1662487 ...

  7. 在vue-cli中使用路由

    1.首先npm中是否有vue-router 一般在vue-cli的时候就已经下载好了依赖包了 2.使用vue的话正常的需要涉及这几个文件 demo/src/router/index.js import ...

  8. Producer & Consumer

    需要与Eureka结合使用 Eureka环境搭建 Producer 一.pom文件 <?xml version="1.0" encoding="UTF-8" ...

  9. 在Spark集群中,集群的节点个数、RDD分区个数、​cpu内核个数三者与并行度的关系

    梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数.Executor数.core数目的关系. 输入可能以多个文件的形式存储在H ...

  10. expect脚本中,变量的写法

    一.expect脚本中,变量的不同写法 shell脚本中定义时间变量的写法:time=`date "+%Y%m%d"` ==>>直接照搬到expect中,设置的变量是不 ...