您好,欢迎访问三七文档
LYProxyServer―――PowerbyLiuYang2003LYProxyServer―――PowerbyLiuYang2003(Page1of9)代理服务器在Windows下的实现LYSoft---刘洋摘要:代理服务器作为连接Internet与Intranet的桥梁,在实际应用中发挥着极其重要的作用。它可用于多个目的,最基本的功能是连接,此外还包括安全性、缓存、内容过滤、访问控制管理等功能。目前市场上主要是国外的代理服务器产品,而国外的产品并不能很好的适应国内企业的需求。本文实现了一个代理服务器系统,可代理HTTP,Tunnel,Socks5TCP这三个最常用的协议,此外还有用户管理和Web服务,Web代理等功能。关键字:代理服务器(Proxy)、HTTP、Windows、Tunnel、Socks5、、ServerAbstract:ProxyserversthatactasabridgebetweenInternetandIntranetandcacheInternetresourceshavegainedwideacceptanceattheenterpriselevel.Attemptsarebeingmadetoextendproxyserverstosupportmulti-levelcachinginordertoreduceInternetworkloadandobtainanincreaseinperformanceandsecurity.Proxyserverisbebuiltbymanysoftwarecompany.Buttheyaremightbenotsuitableforoursituation.Thispaperargueshowtodesignaproxysystemthatsupportsfavorprotocol:HTTP,TunnelandSocks5TCP.Wecanextendthissystemtoadaptourapplications.Keyword:Proxy、HTTP、Windows、Tunnel、Socks5、、ServerPowerbyLYSoftLiuYang2003-05-02Webpages:―――PowerbyLiuYang2003LYProxyServer―――PowerbyLiuYang2003(Page2of9)引言随着计算机知识的逐步普及以及Internet网络的迅速发展。越来越多的公司纷纷将自己的公司局域网接入了Internet。当然接入因特网的方式是多样的。通常,对于个人用户来说,只要购买一个调制解调器通过一根电话线就能连上因特网了。公司由于计算机数量多,通信需求量大,一般都采用专线接入方式。然而每台计算机都使用专线上网的费用太昂贵了,那么有没有办法利用一条电话线或者是专线就可以使多台计算机同时上网呢?在这种情况下,代理服务器便应运而生了。那什么是代理服务器,它是如何工作的,它有什么作用以及如何设置和使用代理服务器就成了人们很关心的话题。籍于此,我就参照有关代理服务器的技术资料开发出LYProxyServer代理服务器。第一章代理服务器的基础理论1.1代理服务器的基本概念:代理服务器(ProxyServer)就是个人网络和因特网服务商之间的中间代理机构,它负责转发合法的网络信息,并对转发进行控制和登记。在使用网络浏览器浏览网络信息的时候,如果使用代理服务器,浏览器就不是直接到Web服务器去取回网页,而是向代理服务器发出请求,由代理服务器取回浏览器所需要的信息。目前使用的因特网是一个典型的客户机/服务器结构,当用户的本地机与因特网连接时,通过本地机的客户程序比如浏览器或者软件下载工具发出请求,远端的服务器在接到请求之后响应请求并提供相应的服务。1.2代理服务器的作用:代理服务器处在客户机和服务器之间,对于远程服务器而言,代理服务器是客户机,它向服务器提出各种服务申请;对于客户机而言,代理服务器则是服务器,它接受客户机提出的申请并提供相应的服务。也就是说,客户机访问因特网时所发出的请求不再直接发送到远程服务器,而是被送到了代理服务器上,代理服务器再向远程的服务器提出相应的申请,接收远程服务器提供的数据并保存在自己的硬盘上,然后用这些数据对客户机提供相应的服务。1.3使用代理服务器的好处:对于使用代理服务器上网的用户来说,合理设置并使用它有很多好处:1、能加快对网络的浏览速度;2、节省IP开销。使用代理服务器时,所有用户对外只占用一个IP,所以不必租用过多的IP地址,降低网络的维护成本(注:NAT服务器也是一种代理服务器,但它工作在IP层);3、可以作为应用防火墙保护局域网的安全。通过代理服务器,用户可以设置IP地址过滤,限制内部网对外部的访问权限;4、通过代理服务器,用户可以设置用户验证和记账功能,对用户进行记账,没有登记的用户无权通过代理服务器访问Internet网。并对用户的访问时间、访问地点、信息流量进行统计。下面给出使用ProxyServer的网络系统拓扑图:LYProxyServer―――PowerbyLiuYang2003LYProxyServer―――PowerbyLiuYang2003(Page3of9)从图可以看出代理服务器是中小型企业访问Internet解决方案的重要组成部分,对它的功能进行简单的扩展,就可以构成访问计费系统和管理系统,因此拥有代理服务器的内核对企业管理和程序员都是很有意义的。1.4代理服务器的工作原理:首先,我要向大家声明的是,代理服务器与专线接入中用到的路由器是两个不同的概念。代理服务器是建立在TCP/IP协议应用层上的一种服务软件,而路由器则是连接在网络中的一台硬件设备,它是工作在TCP/IP协议的IP层上,主要起寻径作用。代理服务器软件一般安装在一台性能比较突出且装有调制解调器和网卡的计算机上。在内部局域网中的每一台客户机都必须拥有一个独立的IP地址,而且事先必须在客户机软件上配置使用代理服务器并指向代理服务器的IP地址和服务端口号。当代理服务器启动时,将利用一个名为WinSock的动态连接程序来开辟一个指定的端口,等待用户的访问请求。从图可以直接看出代理服务器是Internet接入的中介。1.5需求分析:目前市场上流行的代理服务器,像MicrosoftProxyServer、NetscapeProxyServer、WinGate、WinRouter等,虽然功能和性能等方面都还相当的不错,但毕竟是别人的东西,从保证安全性的角度出发,很有必要开发一个自己的代理服务器。而且,在实际使用中可定制性太差,因此研究并实现代理服务器不仅有助于深入了解各种Internet协议的实现细节,掌握代理的技术,而且可实现软件的国产化,满足国内用户的安全性需求,对于社会和个人都是有积极意义的。下面是小型企业/网吧/校园网络的网络拓扑图:LYProxyServer―――PowerbyLiuYang2003LYProxyServer―――PowerbyLiuYang2003(Page4of9)第二章代理服务器的实现核心根据代理服务器工作的层次,一般可分为应用层代理(HTTP,FTP)、传输层代理(Scoks,Tunnel)。为便于统一处理,本文采用TCP传输层代理,在此基础上支持HTTP/Socks5协议代理。并出于对可靠性和简单性方面的考虑,本代理服务器系统采用端口重定向方案而且不提供对Cache的支持,只是简单定制了客户端的操作过程。代理服务器监听特定端口,客户端需要连接到外部网络时,首先要显式地连接代理服务器的监听端口。代理服务器响应后,客户端指出需要连接的远端目的地,由代理服务器来进行连接。连接成功以后,代理服务器转发数据,客户端的操作就像直接与远端相连一样了。下文针对LYProxyServer的HTTP代理进行讨论。本系统还支持其他协议Tunnel、Socks5TCP,其基本原理与HTTP类似,就不另外专门讨论了。2.1基本思路当前流行的浏览器的系统选项中有一个参数,即“通过代理服务器连接”,经过编程测试,当局域网中一台工作站指定了该属性,再发出Internet请求时,请求数据将发送到所指定的代理服务器上,以下为请求数据包示例:GET:home.microsoft.comProxy-Connection:Keep-Alive其中第一行为目标URL及相关方法、协议,“Host”行指定了目标主机的地址。由此知道了代理服务的过程:接收被代理端的请求、连接真正的主机、接收主机返回的数据、将接收数据发送到被代理端。为此可编写一个简单的程序,完成上述网络通信重定向问题。用Delphi设计时,选用HTTPProxyClient(继承自TWSocketClient)作为与被代理工作站通信的套接字控件,选用RemoteSocket(继承自WSocket)作为与远程主机通信的套接字控件,并且这个控件作为HTTPProxyClient的内部成员,一个HTTPProxyClient只有唯一的一个RemoteSocket。编程时应解决的一个重要问题是多重连接处理问题,为了加快代理服务的速度和被代理端的响应速度,套接字控件的属性应设为非阻塞型;各通信会话与套接字动态绑定,用套接字的Owner属性值确定属于哪一个会话。2.2HTTP代理的建立过程1)Proxy启动监听Brower的连接申请2)Proxy接受Brower的连接请求,Brower向Proxy发代理数据请求LYProxyServer―――PowerbyLiuYang2003LYProxyServer―――PowerbyLiuYang2003(Page5of9)3)创建并启动P_C_S动态对象,此对象负责Proxy与Browser的数据传输4)Proxy解析Brower发的数据,分析数据报,确定服务类型(HTTP),服务器地址和服务端口号5)P_C_S创建并启动Proxy-RemoteSocket(P_R_SProxy-Server)动态对象,该动态对象连接到远程服务器,负责远端Server与Proxy的数据传输6)Proxy内核相互转发P_C_S动态对象的数据和P_R_S动态对象的数据2.4代理核心框架结构HTTP协议是各部分单独连接传送的,Web页面中的每个文本,图片和其它对象都是作为独立单元传送的,为了提高Proxy的效率防止主程序阻塞,特意使用非阻塞的多对象Socket处理,本系统没有使用多线程,只有主线程!所有数据由Socket动态对象负责传输。主线程在Proxy端口监听Brower的申请,然后启动P_C_S对象;P_C_S对象负责接受每个Brower的申请(每个P_C_S都是独立的),在完成Brower到Proxy双向数据传送的同主线程1创建监听socket2监听Brower的申请3创建启动P_C_S对象P_C_S对象AcceptBrower关联处理事件创建启动P_R_S对象P_R_S对象连接远程服务器数据传输分析请求数据Web服务发送请求文件各对象之间的关系会话结束,释放资源接收接收发送发送请求1.监听2.连接上,发数据6.连接服务器3.创建并启动P_C_S动态对象初始化数据ProxyRemoteSocketProxyClientSocketProxyClientSocketProxyClientSocketProxyRemoteSocketProxyClientSocket4.解析数据ProxyRemoteSocket5.创建P_R_S动态对象缓冲Buffer/Web服务数据系统管理ProxyBrowerServerHTTP代理的建立过程图解LYProxyServer―――PowerbyLiuYang2003LYProxyServer―――PowerbyLiuYang2003(Page6of
本文标题:代理服务器在
链接地址:https://www.777doc.com/doc-1584358 .html