【正文】
bled. It39。 特此聲明! 作者簽名: 2021 年 06月 日 第 21 頁 共 20頁 he new army slippers. How nice my handkerchiefs look, don39。文中除了特別加以標注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機構(gòu)的學(xué)位或證書而使用過的材料。 [2] 王艷平 ,張越 .Windows網(wǎng)絡(luò)與通信程序設(shè)計 .北京:人民郵電出版社 ,2021。設(shè)置結(jié)果如下所示: 圖 6 代理設(shè)置 第 17 頁 共 20頁 打開 IE瀏覽器,輸入 請求數(shù)據(jù)訪問。 } StartProxy()。 關(guān)閉服務(wù)器 當使用完設(shè)計的代理 服務(wù) 器后,我 們將調(diào)用系統(tǒng)功能函數(shù)關(guān)閉代理服務(wù)器。 retval = send(pParpPairsoc_ClitoPro,Buffer,Len,0)。 pParpPairStateProtoSerClosed=TRUE。 端口地址轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序。 return 0。 struct hostent *hp。否則返回接收信息。 retval=send(,Buffer,Len,0)。mand用于保存 get,con,user等命令,這里顯然是 get。 if(==FALSE) { closesocket()。 啟動另一偵聽 ,用來處理客戶端傳來的另一個請求。 } 第 11 頁 共 20頁 綁定完成后,緊接著就將此套接字置入監(jiān)聽以準備接受客戶端的連接請求,調(diào)用 listen 函數(shù), ::listen(listen_socket,5),最后就可以啟動處理線程進行偵聽。 此處將 本機 IP 地址填入 此變量。 return 1。在 VC主窗口中,執(zhí)行主菜單“ File” /“ New” 命令,建立一個控制臺應(yīng)用程序類型的工程,工程名為“ MiniProxy”;點擊“ OK”后選擇“ an application that supports MFC” ,之后一直確定 ,完成項目工程的創(chuàng)建工作。其基本規(guī)劃如下: 1. 等待來自客戶( Web 瀏覽器)的請求 2. 啟動一個新的線程,以處理客戶連接請求 3. 讀取瀏覽器請求的第一行(該行內(nèi)容包含了請求的目標 URL) 4. 分析請求的第一行內(nèi)容,得到目標服務(wù)器的 地址 和端口 5. 打開一個通向目標服務(wù)器(或下一個代理服務(wù)器,如合適的話)的 Socket 6. 把請求的第一行發(fā)送到輸出 Socket 7. 把請求的剩余部分發(fā)送到輸出 Socket 8. 把目標 Web 服務(wù)器返回的數(shù)據(jù)發(fā)送給發(fā)出請求的瀏覽器 當然,如果考慮細節(jié)的話,情況會更復(fù)雜一些。ProxyToServer 用于 接收 Server 的數(shù)據(jù)、傳給請求 Client。 建立套接字連接- connect()和 accept() 這兩個系統(tǒng)調(diào)用用于完成一個完整相關(guān)的建立, 用于 客戶機與網(wǎng)絡(luò)中的服 第 7 頁 共 20頁 務(wù)器建立連接時,用 connect()這個調(diào)用連接將請求發(fā)到偵聽方。這時系統(tǒng)會默認地為套接字綁定一個本地端口值。使用它們可以保證程序正確運行在所有機器上。 har sin_zero[8]。 它的第一個參數(shù)就是要加載的庫版本,第二個參數(shù)是用來返回 DLL 庫的詳細信息的。為了接受客戶端的連接請求,服務(wù)器必須調(diào)用 accept 函數(shù)。同時,這也隱藏了內(nèi)部網(wǎng)絡(luò)結(jié)構(gòu),從而降低了內(nèi)部網(wǎng)絡(luò)受到攻擊的風(fēng)險。它實際上相當于一種網(wǎng)絡(luò)地址轉(zhuǎn)換器,所謂網(wǎng)絡(luò)地址轉(zhuǎn)換器就是當數(shù)據(jù)包向前傳遞的過程中,可以轉(zhuǎn)換數(shù)據(jù)包中的 IP地址和 TCP/UCP 端口等地址信息。通訊是分兩次的,先是機器和代理服務(wù)器通訊,再是代理服務(wù)器和目的地址通訊。通過分析指定 IP地址,可以查詢到網(wǎng)絡(luò)用戶的目前所在地。 更重要的是: Proxy Server (代理服務(wù)器 )是 Inter鏈路級網(wǎng)關(guān)所提供的一種重要的安全功能,它的工作主要在開放系統(tǒng)互聯(lián) (OSI)模型的對話層。為了便于直接使用 Windows 提供的網(wǎng)絡(luò)編程接口,我們 使用 Microsoft Visual C++ 作為開發(fā)工具 ,利用 MFC 類庫中提供的兩個 Socket 類 第 2 頁 共 20頁 CAsyncSocket 和 Csocket。絕大多數(shù)企業(yè)、部門在使用 代理 服務(wù)器的時候,都會考慮這個問題,把它作為選購 代理 服務(wù)器產(chǎn)品的重要依據(jù)??梢赃@樣認為,代理是雙向的。 畢業(yè)設(shè)計 ( 論文 ) 簡易代理服務(wù)器的設(shè)計 論文作者姓名: 申請學(xué)位專業(yè): 申請學(xué)位類別: 指導(dǎo)教師姓名(職稱): 論文提交日期: 簡易代理服務(wù)器的設(shè)計 摘 要 代理服務(wù)器是介于瀏覽器和 Web 服務(wù)器之間的一臺服務(wù)器,它的功能 是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息。即對于內(nèi)部網(wǎng)上的用戶來說,代理服務(wù)器可看作是一個外部網(wǎng)的代理;對于外部網(wǎng)絡(luò)來說,代理服務(wù)器可以看作一個要訪問外部網(wǎng)的客戶。目前市場上流行的 代理 服務(wù)器,像 Microsoft Proxy Server、 Netscape Proxy Server、 Win Gate 等 國外的產(chǎn)品, 功能和性能等方面都還不錯, 我們正好可以通過借鑒它們產(chǎn)品的優(yōu)點 , 開發(fā)一個具有自主產(chǎn)權(quán)的代理服務(wù)器產(chǎn)品。 使用 這兩個 Socket 類 , 我們可以 運 用面向?qū)ο蟮姆椒▉磉M行 Socket 編程,而且它們還分別在較低和較高層次上封裝了 Windows Sockets API,為程序員開發(fā) Socket 程序提供了便利。主要的功能有: 連接 Inter 與 Intra 充當防火墻:因為所有內(nèi)部網(wǎng)的用戶通過代理服務(wù)器訪問外界時,只映射為一個 IP地址,所以外界不 能直接訪問到內(nèi)部網(wǎng);同時可以設(shè)置 IP地址過濾,限制內(nèi)部網(wǎng)對外部的訪問權(quán)限;另外,兩個沒有互聯(lián)的內(nèi)部網(wǎng),也可以通過第三方的代理服務(wù)器進行互聯(lián)來交換信息。例如,大家在一些論壇上看到,論壇中明確標出了發(fā)帖用戶目前所在地,這就是根據(jù)論壇會員登錄時的 IP 地址解析的。機器 和代理服務(wù)器通訊時,目的 IP 是代理服務(wù)器的 IP。有了網(wǎng)絡(luò)地址轉(zhuǎn)換器,家庭網(wǎng)絡(luò)或小型的辦公網(wǎng)絡(luò)中的電腦就可以使用私有地址,并且通過網(wǎng)絡(luò)地址轉(zhuǎn)換器將私有地址轉(zhuǎn)換成 ISP 分配的單一的公用 IP 地址從而實現(xiàn)對 Inter 的連接。 例如有 軟件: WinRoute,Sygate。 客戶端創(chuàng)建套接字后即可調(diào)用 connect 函數(shù)去試圖連接服務(wù)器監(jiān)聽套接字。 winsock 的尋址方式 因為 Winsock 要兼容多個協(xié)議,所以必須使用通用的尋址方式。 }。 系統(tǒng)基本套接字調(diào)用 創(chuàng)建和關(guān)閉套接字- socket()和 closesocket() 應(yīng)用程序在使用套接字前,首先必須擁有一個套接字,系統(tǒng)調(diào)用 socket()向應(yīng)用程序提供創(chuàng)建套接字的手段 ,如果成功將返回套接字句柄,如果創(chuàng)建失敗,返回 INVALID_SOCKET(即 1)。注意:地址在建立套接字通 信過程中起著重要作用, 程序使用中通??刻畛鋝ockaddr_in 結(jié)構(gòu)來綁定套接字到本地地址。之后,服務(wù)端就會調(diào)用 accept(),而在 調(diào) 用 accept ()的參數(shù)前應(yīng)該先調(diào)用過 listen(),Accept 函數(shù)定義如下: SOCKET accept(SOCKET soc, struct sockaddr * addr, int * addrlen)。在處理數(shù)據(jù)請求的過程中,我們必須知道 Server 的地址,這是非常重要的。實際上,這里主要有兩個問題要考慮:第一,從 Socket 按行讀取數(shù)據(jù)最適合進一步處理,但這會產(chǎn)生性能瓶頸;第二,兩個 Socket 之間的連接必需高效。 圖 4 Library files設(shè)置 功 能實現(xiàn) 數(shù)據(jù)變量定義 定義代表 協(xié)議 的 變量 HTTP, 定義緩 沖區(qū)大小變量MAXBUFFERSIZE。 } 之后,創(chuàng)建一個代理服務(wù)器( Proxy)用于網(wǎng)絡(luò)通信的套接字 listen_socket。 =htons(port)。 請求處理過程 在這一步設(shè)計函數(shù) ClientToProxy 來處理收到客戶請求,并將請求合理傳送至 Server(客戶請求的數(shù)據(jù)服務(wù)器 )。 如果此客戶端到代理服務(wù)器的連接正確,我們就在這一 socket 連接上使用revc 函數(shù)接收數(shù)據(jù)。 =TRUE。proto 保存協(xié)議。 printf(\n send() failed:error%d\n,WSAGetLastError())。 Len=retval。 server_name = pParAddress。 } 有了解析后的地址信息后,下一步,將這些信息拷貝給 sockaddr_in 結(jié)構(gòu)。 conn_socket = socket(AF_INET,socket_type,0); 打開一個 socket,如果打開失敗,顯示錯誤信息,關(guān)閉代理服務(wù)器到服務(wù)器的連接狀態(tài), if (conn_socket 0 ) 第 14 頁 共 20頁 { fprintf(stderr,Client:Error Opening socket: Error %d\n,WSAGetLastError())。 break。 fprintf(stderr,send() failed: error %d\n,WSAGetLastError())。首先用 closesocket(listen_socket)關(guān)閉套接字 句柄 ,再用 WSACleanup()來釋放分配給指定應(yīng)用程序的資源 。 if(getchar()==39。這時客戶端的瀏覽器的請求轉(zhuǎn)向我們的代理服務(wù)程序,代理程序轉(zhuǎn)發(fā)請求給 baidu 服務(wù)器,并從它那兒取回數(shù)據(jù),顯示在瀏覽器上,結(jié)果如下: 圖 7 通過代理的數(shù)據(jù)請求結(jié)果 可見,我們設(shè)計的簡易代理服務(wù)程序成功完成了目標。 [3] 汪曉平 ,劉韜 .Visual C++ 開發(fā)網(wǎng)絡(luò)典型應(yīng)用實例導(dǎo)航 [M].北京:人民郵電出版社 ,2021。除非另有說明,本文的工作是原始性工作。t they? Hannah washed and ironed them for me, and I marked them all myself, said Beth, looking proudly at the somewhat uneven letters which had cost her such labor. Bless the child! She39。s all right, dear, and a very pretty idea, quite sensible too, for no one can ever mistake now. It will please her very m uch, I know, said Meg, with a frown for Jo and a smile for Beth. There39。m so glad you came before we began! May I go and help carry the things to the poor little children? asked Beth eagerly. I shall take the cream and the muffings, added Amy, heroically giving up the article she most liked. Meg was already covering the buckwheats, and piling the bread into one big plate. I thought you39。 ever since she was born. That was a very happy breakfast, though they didn39。t laugh at me, Jo! I didn39。 on them instead of `M. March39。 ( 2)學(xué)??梢圆捎糜坝 ⒖s印或其他復(fù)制方式保存學(xué)位論文。 [5] 孫青 .代理服務(wù)器安裝配置與應(yīng)用 [M]. 北京: 冶金工業(yè)出版社 ,2021。代理服務(wù)器作為客戶端 /服務(wù)器的聯(lián)系紐帶,實現(xiàn)了接收和解釋客戶端的請求,能夠創(chuàng)建到服務(wù)器的新連接,能收服務(wù)器發(fā)來的響應(yīng),發(fā)出和解釋服務(wù)器的響應(yīng)并將該響應(yīng)傳回給客戶端等系統(tǒng)必須的功能。) break。 用 StartProxy()啟動服務(wù)后可以讓程序準備接收一個字符,根據(jù)字符判斷代理服務(wù)器是否要主動關(guān)閉。 pParpPairStateClitoProClosed=TRUE。 if (retval == 0) { printf(Server closed connection\n)。 return 1。server,0,sizeof(server))。 s