Atitit. http
代理原理  atiHttpProxy  大木马

1.
面这张图可以清晰地阐明HttpProxy的实现原理:1

2.
代理服务器用途1

3.
其中流程具体如下:2

4.
设计规划3

5.
结束语4

1. 面这张图可以清晰地阐明HttpProxy的实现原理: 

2. 代理服务器用途

代理服务器看成是一种扩展浏览器功能的途径。例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据

调试器

数据搜集器

木马病毒

3. 其中流程具体如下:

1、客户端通过浏览器向代理服务器发送HttpRequest(GET/POST);


2、代理服务器读取请求头,抽取出请求的具体目标服务器HOST和PORT;


3、代理服务器把请求头发送给目标服务器;

4、代理服务器建立管道,供客户端和目标服务器通过两个Socket通信。

不管以哪种方式应用代理服务器,其监控HTTP传输的过程总是如下:

· 步骤一:内部的浏览器发送请求给代理服务器。请求的第一行包含了目标URL。

· 步骤二:代理服务器读取该URL,并把请求转发给合适的目标服务器。

· 步骤三:代理服务器接收来自Internet目标机器的应答,把应答转发给合适的内部浏览器。

例如,假设有一个企业的雇员试图访问www.cn.ibm.com网站。如果没有代理服务器,雇员的浏览器打开的Socket通向运行这个网站的Web服
务器,从Web服务器返回的数据也直接传递给雇员的浏览器。如果浏览器被配置成使用代理服务器,则请求首先到达代理服务器;随后,代理服务器从请求的第一 行提取目标URL,打开一个通向www.cn.ibm.com的Socket。当www.cn.ibm.com返回应答时,代理服务器把应答转发给雇员的
浏览器。

当然,代理服务器并非只适用于企业环境。作为一个开发者,拥有一个自己的代理服务器是一件很不错的事情。例如,我们可以用代理服务器来分析浏览器和Web
服务器的交互过程。测试和解决Web应用中存在的问题时,这种功能是很有用的。我们甚至还可以同时使用多个代理服务器(大多数代理服务器允许多个服务器链 接在一起使用)。例如,我们可以有一个企业的代理服务器,再加上一个用Java编写的代理服务器,用来调试应用程序。但应该注意的是,代理服务器链上的每
一个服务器都会对性能产生一定的影响。

4. 设计规划

正如其名字所示,代理服务器只不过是一种特殊的服务器。和大多数服务器一样,如果要处理多个请求,代理服务器应该使用线程。下面是一个代理服务器的基本规划:

1. 等待来自客户(Web浏览器)的请求。

2. 启动一个新的线程,以处理客户连接请求。

3. 读取浏览器请求的第一行(该行内容包含了请求的目标URL)。

4. 分析请求的第一行内容,得到目标服务器的名字和端口。

5. 打开一个通向目标服务器(或下一个代理服务器,如合适的话)的Socket。

6. 把请求的第一行发送到输出Socket。

7. 把请求的剩余部分发送到输出Socket。

8. 把目标Web服务器返回的数据发送给发出请求的浏览器。

当然,如果考虑细节的话,情况会更复杂一些。实际上,这里主要有两个问题要考虑:第一,从Socket按行读取数据最适合进一步处理,但这会产生性能瓶 颈;第二,两个Socket之间的连接必需高效。有几种方法可以实现这两个目标,但每一种方法都有各自的代价。例如,如果要在数据进入的时候进行过滤,这
些数据最好按行读取;然而,大多数时候,当数据到达代理服务器时,立即把它转发出去更适合高效这一要求。另外,数据的发送和接收也可以使用多个独立的线 程,但大量地创建和拆除线程也会带来性能问题。因此,对于每一个请求,我们将用一个线程处理数据的接收和发送,同时在数据到达代理服务器时,尽可能快速地 把它转发出去。

当代理服务器连接到Web服务器之后,我用一个简单的循环在两个Socket之间传递数据。这里可能出现一个问题,即如果没有可操作的数据,调用read 方法可能导致程序阻塞,从而挂起程序。为防止出现这个问题,我用setSoTimeout方法设置了Socket的超时时间(参见Listing 2)。这样,如果某个Socket不可用,另一个仍旧有机会进行处理,我不必创建一个新的线程。

和所有线程对象一样,HttpProxy类的主要工作在run方法内完成(见Listing
2)。run方法实现了一个简单的状态机,从Web浏览器每次一个读取字符,持续这个过程直至有足够的信息找出目标Web服务器。然后,run打开一个通
向该Web服务器的Socket(如果有多个代理服务器被链接在一起,则run方法打开一个通向链里面下一个代理服务器的Socket)。打开
Socket之后,run先把部分的请求写入Socket,然后调用pipe方法。pipe方法直接在两个Socket之间以最快的速度执行读写操作。

如果数据规模很大,另外创建一个线程可能具有更高的效率;然而,当数据规模较小时,创建新线程所需要的开销会抵消它带来的好处。

Listing 3显示了一个很简单的main方法,可以用来测试HttpProxy类。大部分的工作由一个静态的startProxy方法完成(见Listing
4)。这个方法用到了一种特殊的技术,允许一个静态成员创建HttpProxy类(或HttpProxy类的子类)的实例。它的基本思想是:把一个
Class对象传递给startProxy类;然后,startProxy方法利用映像API(Reflection
API)和getDeclaredConstructor方法确定该Class对象的哪一个构造函数接受一个Socket参数;最
后,startProxy方法调用newInstance方法创建该Class对象。

利用这种技术,我们可以在不创建startProxy方法定制版本的情况下,扩展HttpProxy类。要得到给定类的Class对象,只需在正常的名字 后面加上.class(如果有某个对象的一个实例,则代之以调用getClass方法)。由于我们把Class对象传递给了startProxy方法,所 以创建HttpProxy的派生类时,就不必再特意去修改startProxy。(下载代码中包含了一个派生得到的简单代理服务器)。

5. 结束语

利用派生类定制或调整代理服务器的行为有两种途径:修改主机的名字,或者捕获所有通过代理服务器的数据。processHostName方法允许代理服务 器分析和修改主机名字。如果启用了日志记录,代理服务器为每一个通过服务器的字符调用writeLog方法。如何处理这些信息完全由我们自己决定――可以
把它写入日志文件,可以把它输出到控制台,或进行任何其他满足我们要求的处理。writeLog输出中的一个Boolean标记指示出数据是来自浏览器还 是Web主机。

和许多工具一样,代理服务器本身并不存在好或者坏的问题,关键在于如何使用它们。代理服务器可能被用于侵犯隐私,但也可以阻隔偷窥者和保护网络。即使代理 服务器和浏览器不在同一台机器上,我也乐意把代理服务器看成是一种扩展浏览器功能的途径。例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据;未 来的代理服务器甚至还可能把页面从一种语言翻译成另一种语言……可能性永无止境。

多线程Http代理服务器 Java实现 - 独上高楼 - ITeye技术网站.htm

用Java开发代理服务器.htm

Atitit. http 代理原理  atiHttpProxy  大木马的更多相关文章

  1. tit.Atitit. http 代理原理  atiHttpProxy  大木马 h

    Atitit. http 代理原理  atiHttpProxy  大木马 1. 面这张图可以清晰地阐明HttpProxy的实现原理:1 2. 代理服务器用途1 3. 其中流程具体如下:2 4. 设计规 ...

  2. Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结

    Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结 1. 普通代理1 1.1.1. 普通代理2 2. 隧道代理3 3. 反向代理 4 4. 正向代理也可以使用apache实现 ...

  3. Atitit事件代理机制原理 基于css class的事件代理

    Atitit事件代理机制原理 基于css class的事件代理 1.1. 在javasript中delegate这个词经常出现,看字面的意思,代理.委托1 1.2. 事件代理1 1.3. 代理标准化规 ...

  4. Atitit.ide技术原理与实践attilax总结

    Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...

  5. Atitit 游戏的原理与概论attilax总结

    Atitit 游戏的原理与概论attilax总结 1. 游戏历史2 1.1.1. 盘点PC游戏史上最重要的50款游戏2 1.1.2. 回味人类文明进程 五款经典的历史游戏2 2. 游戏类型(主要分为6 ...

  6. Atitit 软件国际化原理与概论

    Atitit 软件国际化原理与概论 语言和文化习俗因地域不同而差别很大.对某一特定的地域的 语言环境称为"locale".它不仅包括语言和货币单位,而且还包括 数字标示格式, 日期 ...

  7. Atitit.http代理的实现 代码java php c# python

    Atitit.http代理的实现 代码java php c# python 1. 代理服务器用途 代理服务器看成是一种扩展浏览器功能的途径.例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据 调 ...

  8. Atitit图像识别的常用特征大总结attilax大总结

    Atitit图像识别的常用特征大总结attilax大总结 1.1. 常用的图像特征有颜色特征.纹理特征.形状特征.空间关系特征. 1 1.2. HOG特征:方向梯度直方图(Histogram of O ...

  9. Atitit  ocr识别原理 与概论 attilax总结

    Atitit  ocr识别原理 与概论 attilax总结 1.1. Ocr的过程与流程1 1.2. OCR不同技术细分略有不同,但大概原理是一样的. 即主要技术过程是:二值化(又叫归一化)----- ...

随机推荐

  1. Apache2.4.6添加虚拟主机提示:NameVirtualHost has no effect and will be removed in the next release /usr/local/apache/conf/extra/httpd-vhosts.conf

    [root@localhost conf]# service httpd restart 停止 httpd: [确定] 启动 httpd:AH00548: NameVirtualHost has no ...

  2. 虚拟PDF打印机

    doPDF虚拟打印机 doPDF 是一个免费的PDF转换器,可同时运用于商业和个人,它把自己安装为一个打印机驱动,允许从任意一个有打印输出的Windows程序中打印,还包含缩放,质量定义和页面大小定义 ...

  3. 如何修改chrome谷歌浏览器的默认搜索引擎

    如图设置,chrome自己提供的百度的引擎,不能用,自己添加一个即可 添加的方法如下:打开百度搜索内容“cai”,然后把搜索的url内容放到上图的网址栏里,并用%s替换“cai”

  4. Flask如何使用https?

    1 安装python 的 openssl 的类库 pip install pyOpenSSL 2 在 Flask 的代码中可以直接使用,注意ssl_context的值必须是adhoc from fla ...

  5. SQL Server 获取某时间点后修改的函数Function 并以文本格式显示

    修改查询分析器如下选项 右键=>查询选项 =>结果=>文本=> 取消 在结果集中包括列标题 的勾选 右键=>将结果保存到=> 选择 以文本格式显示结果 执行如下SQ ...

  6. [转载]《Delphi 版 everything、光速搜索代码》 关于获取文件全路径 GetFullFileName 函数的优化

    Delphi 版 everything.光速搜索代码>,文章中关于获取文件全路径的函数:GetFullFileName,有一个地方值得优化. 就是有多个文件,它们可能属于同一个目录. 譬如 Sy ...

  7. 你以为border-radius只是圆角吗?【各种角度】

    border-radius,国内翻译成圆角,你可能以为这个属性就是用来画圆角,没错,但是除此之外,它还可以做点别的事情. radius其实指的是边框所在圆的半径,这个CSS3属性不仅能够创建圆角,还可 ...

  8. Centos&RHEL 6安装图形化

    Linux是一个多任务的多用户的操作系统,而在安装linux的时候经常遇到的问题-没有图形化桌面.在上节中我们演示了RHEL7安装图形化的过程,下面我们演示Centos6的图形化安装. 一.Cento ...

  9. 解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错

    解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错 学习了:https://www.cnblogs.com/cnhkzyy/p/9119339.html se ...

  10. MongoDB的连接字符串

    本文导读:MongoDB数据库与传统的关系型数据库相比,它具有操作简单.完全免费.源码公开等特点,这使MongoDB产品广泛应用于各种大型门户网站和专业网站.由于MongoDB连接并不支持HTTP协议 ...