笔记-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. jQuery图片组展示插件----Galleria使用简介

    1.技术目标 掌握Galleria插件的基本操作 2.Galleria简介 Galleria是一个jQuery插件,可用于展示多张图片,操作也比较简单, 展示效果也非常不错,如图: 提示:Galler ...

  2. JS常用公共方法封装

    _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||/ ...

  3. Spring @Autowired使用介绍

    参考博客: https://blog.csdn.net/u013412772/article/details/73741710 引用文章地址: https://my.oschina.net/Helio ...

  4. C#执行异步操作的几种方式比较和总结(转发:https://www.cnblogs.com/durow/p/4826653.html)

    0x00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过,倒也没遇到什么大问题.最近因为需求要求 ...

  5. linux 命令——30 chown (转)

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  6. perl 输出当前时间

    #!/bin/perluse POSIX;print strftime("%Y-%m-%d %H:%M:%S", localtime);

  7. 网络编程——TCP协议和通信

    第1章 TCP通信 TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象. 区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地 ...

  8. 自建ssr(谷歌云免费试用一年)

    近期我一个朋友的VPN到期了,他也不想再去续费,同时发现谷歌云第一年申请时是免费的,所以他就自己搭建了一个自己专属的VPN 以下是他的搭建教程:  本教程难点在于申请免费试用资格 谷歌云+ssr搭建免 ...

  9. 解决: Intelij IDEA 创建WEB项目时没有Servlet的jar包

    今天创建SpringMVC项目时 用到HttpServletRequest时, 发现项目中根本没有Servlet这个包, 在网上搜了一下,这个问题是因为web项目没有添加服务器导致的. 配置tomec ...

  10. SunmmerVocation_Learning--Java数组的创建

    一维数组声明方式: type var[] 或 type[] var; 如int a[], int[] a; Java中声明数组不能指定其长度,如int a[5]是非法的. 一维数组对象的创建: Jav ...