網絡代理程序的種類非常多,根據代理服務程序代理的協議不同,分成HTTP代理服務程序、FTP代理服務程序等,運行代理服務程序的服務器也就稱為HTTP代理服務器和FTP代理服務器。在本節中介紹的Web代理服務程序代理的就是HTTP協議。
一.網絡代理的類型及實現原理:
網絡代理服務根據工作層次,一般可分為應用層代理、傳輸層代理和SOCKS代理。應用層代理是工作在TCP/IP參考模型的應用層之上,它支持對應用層協議(如HTTP,FTP)的代理。它提供的控制最多,但是不靈活,必須要有相應的協議支持。如果協議不支持代理(如SMTP和POP),那就只能在應用層以下代理,也即傳輸層代理。傳輸層代理直接與TCP層交互,更加靈活。要求代理服務器具有部分真正服務器的功能:監聽特定TCP或UDP端口,接收客戶端的請求同時向客戶端發出相應的響應。另一種代理需要改變客戶端的IP棧,即SOCKS代理。它是可用的最強大、最靈活的代理標准協議。SOCK V4允許代理服務器內部的客戶端完全地連接到外部的服務器,SOCK V5增加了對客戶端的授權和認證,因此它是一種安全性較高的代理。本節後面介紹的代理是一種應用層上面的代理,所代理的協議是HTTP,也就是經常見到的Web代理。
網絡代理就是一個連接客戶端(設定需要代理的計算機)和服務器端(需要訪問資源的服務器)的橋。要實現這種橋,網絡代理就必須滿足下列條件,其實也是代理服務的運行的流程:
(1). 能夠接收並解析客戶端的請求。
(2). 創建到服務器的新連接,並根據轉發客戶端的請求信息。
(3). 接收服務器反饋的信息。
(4). 能夠發出或解釋服務器的響應並將該響應傳回給客戶端。
圖01是網絡代理服務的一個典型模型圖:
圖01:代理服務的模型
二.Visual C#實現Web代理服務程序
Web代理服務是代理服務中最常用的一種代理服務,按照代理服務的層次,它屬於應用層代理,是對TCP/IP參考模型中的應用層的HTTP協議的代理。
Web代理服務也是代理服務中的一種,所以它也要滿足代理服務的基本條件。在下面介紹的代理服務程序中,是按照下列的順序來實現其功能的。
(1). 代理服務器程序偵聽端口,接收客戶端浏覽器發送來的Web請求信息。
(2). 代理服務器程序接收到客戶端Web請求信息後,解析出Web服務器的地址,並創建一個Socket實例,並以此實例連接Web服務器上。
(3). 通過創建的Socket傳送客戶端的Web請求數據包到Web服務器的80端口。
(4). 代理服務器程序接收Web服務器返回頁面數據。
(5). 代理服務器程序把接收來的數據傳送到客戶端,實現Web代理。
由於客戶端的對一個地址的浏覽,要傳送很多的Web請求信息,為了更快、更准確的處理這些信息,Web代理服務程序采用了多線程來處理每一個Web請求。細心的讀者可能會發現,處理每一個客戶端的Web請求信息,代理服務器軟件都要使用二個Socket,一個是用來接收/傳送客戶機的信息,一個是和Web服務器進行交流。為了區分這二個Socket,我們把他們都命名,和服務器對話的Socket,稱為服務Socket;和客戶端機器對話的Scoket,稱為客戶Socket。
下面就開始Web代理服務程序的編寫工作。
這個示例主要包含三個部分內容:
·創建一個Web代理類。
·Web代理服務的類的實例化。
·如何通過這個Web代理類的實例實現Web代理服務。
下面就是第一部分的具體的實現步驟。
(一).創建一個Web代理類
以下是具體的操作步驟如下:
1. 首先啟動Visual Studio .Net,依次選擇"文件"、"新建"、"項目"菜單後,在彈出"新建項目"對話框中將"項目類型"設置為"Visual C#項目",將"模板"設置為"Windows應用程序",在"名稱"文本框中輸入"WebProxy",在"位置"的文本框中輸入"E:\VS.NET項目",然後單擊"確定"按鈕。這樣在"E:\VS.NET項目"目錄中就創建了一個新名稱為"WebProxy"文件夾,裡面存放的就是"WebProxy"的項目文件。