磁县企业做网站推广,内含各种专业的网站搭建模板,网站开发项目人员安排,许昌哪里做网站Atitit. http 代理原理 atiHttpProxy 大木马 1. 面这张图可以清晰地阐明HttpProxy的实现原理#xff1a;1 2. 代理服务器用途1 3. 其中流程具体如下#xff1a;2 4. 设计规划3 5. 结束语4 1. 面这张图可以清晰地阐明HttpProxy的实现原理#xff1a; 2. 代理服务器用途 代… Atitit. http 代理原理 atiHttpProxy 大木马 1. 面这张图可以清晰地阐明HttpProxy的实现原理1 2. 代理服务器用途1 3. 其中流程具体如下2 4. 设计规划3 5. 结束语4 1. 面这张图可以清晰地阐明HttpProxy的实现原理 2. 代理服务器用途 代理服务器看成是一种扩展浏览器功能的途径。例如在把数据发送给浏览器之前可以用代理服务器压缩数据 调试器 数据搜集器 木马病毒 3. 其中流程具体如下 1、客户端通过浏览器向代理服务器发送HttpRequestGET/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方法利用映像APIReflection 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