【正文】
t ge t any of it. And when they went away, leaving fort behind, I think there were not in all the city four merrier people than the hungry little girls who gave away their breakfasts and contented themselves with bread and milk on Christmas morning. That39。m glad you began at onc e, and hope you will keep on. But I want to say one word before we sit down. Not far away from here lies a poor woman with a little newborn baby. Six children are huddled into one bed to keep from freezing, for they have no fire. There is nothing to eat over there, and the oldest boy came to tell me they were suffering hunger and cold. My girls, will you give them your breakfast as a Christmas present? They were all unusually hungry, having waited nearly an hour, and for a minute no one spoke, only a minute, for Jo exclaimed impetuously, I39。t mean anyone should know till the time came. I only meant to change the little bottle for a big one, and I gave all my money to get it, and I39。, looking troubled. It39。. How funny! cried Jo, taking one up. Isn39。 特此聲明! 作者簽名: 2021 年 06月 日 第 21 頁 共 20頁 he new army slippers. How nice my handkerchiefs look, don39。 ( 3)學(xué)??梢詫W(xué)術(shù)交流為目的復(fù)制、贈送和交換學(xué)位論文。文中除了特別加以標(biāo)注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機(jī)構(gòu)的學(xué)位或證書而使用過的材料。 [6] 李明柱 ,單肅 ,趙光啟 .Visual C++最新編程實(shí)踐與技巧 [M].北京:北京航空航天出版社 ,2021。 [2] 王艷平 ,張?jiān)?.Windows網(wǎng)絡(luò)與通信程序設(shè)計(jì) .北京:人民郵電出版社 ,2021。當(dāng)然,此次設(shè)計(jì)也有許多不足之出。設(shè)置結(jié)果如下所示: 圖 6 代理設(shè)置 第 17 頁 共 20頁 打開 IE瀏覽器,輸入 請求數(shù)據(jù)訪問。 CloseProxy()。 } StartProxy()。 這之前還需要讓用戶輸入代理服務(wù)器的端口號,提示用戶最好選用系統(tǒng)保留端口號之外的可用端口。 關(guān)閉服務(wù)器 當(dāng)使用完設(shè)計(jì)的代理 服務(wù) 器后,我 們將調(diào)用系統(tǒng)功能函數(shù)關(guān)閉代理服務(wù)器。 Len=retval。 retval = send(pParpPairsoc_ClitoPro,Buffer,Len,0)。 closesocket(conn_socket)。 pParpPairStateProtoSerClosed=TRUE。 } 在成功創(chuàng)建套接字的連接后,現(xiàn)在就將接收數(shù)據(jù)服務(wù)器的數(shù)據(jù),同樣用函數(shù) recv 來完成,成功時(shí)返回接收的字節(jié)數(shù),錯誤時(shí)顯示出錯信息,關(guān)閉代理服務(wù)器到服務(wù)器的套接字,設(shè)置連接狀態(tài)為關(guān)閉,如果返回的字節(jié)數(shù)為零,表示服務(wù)端關(guān)閉連接,此時(shí)也應(yīng)關(guān)閉代理服務(wù)器端到服務(wù)器 Server 的套接字的句柄,設(shè)置連接狀態(tài)為關(guān)閉。 端口地址轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序。 memcpy(amp。 return 0。 將 socket_type 類型設(shè)定為流式套接字類型,用上面分析出的 server 地址傳給變量 server_name,這會在下面的設(shè)計(jì)中使用。 struct hostent *hp。 第 13 頁 共 20頁 endif 請求響應(yīng) 這一步中,完成 ProxyToServer 函數(shù)的實(shí)現(xiàn)。否則返回接收信息。 同時(shí)代理繼續(xù)接收客戶端的請求,成功時(shí)返回接收的字節(jié)數(shù),錯誤時(shí)顯示出錯信息,關(guān)閉客戶端到代理服務(wù)器的套接字,設(shè)置連接狀態(tài)為關(guān)閉。 retval=send(,Buffer,Len,0)。如果分析出請求是 HTTP 協(xié)議類型的,將進(jìn)行如下處理,首先將字符串協(xié)議部份去掉,把地址存于 address 參數(shù)中,端口設(shè) 為缺省的 80,最終返回這些信息,成功解析出 Server 端的地址信息。mand用于保存 get,con,user等命令,這里顯然是 get。 =TRUE。 if(==FALSE) { closesocket()。 =msg_socket。 啟動另一偵聽 ,用來處理客戶端傳來的另一個(gè)請求。from,amp。 } 第 11 頁 共 20頁 綁定完成后,緊接著就將此套接字置入監(jiān)聽以準(zhǔn)備接受客戶端的連接請求,調(diào)用 listen 函數(shù), ::listen(listen_socket,5),最后就可以啟動處理線程進(jìn)行偵聽。 if(::bind(listen_socket,(sockaddr *)amp。 此處將 本機(jī) IP 地址填入 此變量。 定義用于保存 socket 信息的變量。 return 1。實(shí)現(xiàn)為: WSADATA wsaData。在 VC主窗口中,執(zhí)行主菜單“ File” /“ New” 命令,建立一個(gè)控制臺應(yīng)用程序類型的工程,工程名為“ MiniProxy”;點(diǎn)擊“ OK”后選擇“ an application that supports MFC” ,之后一直確定 ,完成項(xiàng)目工程的創(chuàng)建工作。另外,數(shù)據(jù)的發(fā)送和接收也可以使用多個(gè)獨(dú)立的線程,但大量地創(chuàng)建和 拆除線程也會帶來性能問題。其基本規(guī)劃如下: 1. 等待來自客戶( Web 瀏覽器)的請求 2. 啟動一個(gè)新的線程,以處理客戶連接請求 3. 讀取瀏覽器請求的第一行(該行內(nèi)容包含了請求的目標(biāo) URL) 4. 分析請求的第一行內(nèi)容,得到目標(biāo)服務(wù)器的 地址 和端口 5. 打開一個(gè)通向目標(biāo)服務(wù)器(或下一個(gè)代理服務(wù)器,如合適的話)的 Socket 6. 把請求的第一行發(fā)送到輸出 Socket 7. 把請求的剩余部分發(fā)送到輸出 Socket 8. 把目標(biāo) Web 服務(wù)器返回的數(shù)據(jù)發(fā)送給發(fā)出請求的瀏覽器 當(dāng)然,如果考慮細(xì)節(jié)的話,情況會更復(fù)雜一些。考慮到一個(gè)應(yīng)用程序通常用“時(shí)間”服務(wù)對應(yīng)的端口來和服務(wù)器連接,而服務(wù)器提供某種機(jī)制來通知用戶使用另一端口,因此 gethostbyname()函數(shù)返回的端口號已經(jīng)是網(wǎng)絡(luò)順序了,可以直接用來組成一個(gè)地址,而不需要進(jìn)行轉(zhuǎn)換。ProxyToServer 用于 接收 Server 的數(shù)據(jù)、傳給請求 Client。 Recv 函數(shù)從對方接收數(shù)據(jù),并將其存儲到指定的緩沖區(qū)。 建立套接字連接- connect()和 accept() 這兩個(gè)系統(tǒng)調(diào)用用于完成一個(gè)完整相關(guān)的建立, 用于 客戶機(jī)與網(wǎng)絡(luò)中的服 第 7 頁 共 20頁 務(wù)器建立連接時(shí),用 connect()這個(gè)調(diào)用連接將請求發(fā)到偵聽方。為了接受連接,首先使用 socket函數(shù)創(chuàng)建套接字,然后使用 bind 函數(shù)將它綁定到本地地址,再用 listen 函數(shù)為到達(dá)的連接指定 backlog,最后使用 accept 函數(shù)接受請求的連接。這時(shí)系統(tǒng)會默認(rèn)地為套接字綁定一個(gè)本地端口值。 bind()將套接字地址(包括本地主機(jī)地址和本地端口地址)與所創(chuàng)建的套接字號聯(lián)系起來,即將名字賦予套接字, 以便能夠有效地標(biāo)識套接字。使用它們可以保證程序正確運(yùn)行在所有機(jī)器上。注意: i_addr 返回的 32 位二進(jìn)制數(shù)是用網(wǎng)絡(luò)順序存儲的。 har sin_zero[8]。在 Winsock中,應(yīng)用程序員通過 SOCKADDR_IN 結(jié)構(gòu)來指定 IP地址和端口號。 它的第一個(gè)參數(shù)就是要加載的庫版本,第二個(gè)參數(shù)是用來返回 DLL 庫的詳細(xì)信息的。 當(dāng)數(shù)據(jù)完成交換后,客戶程序和服務(wù)器程序都會分別關(guān)閉創(chuàng)建的套接字句柄以完成雙方的對話,至此程序服務(wù)結(jié)束。為了接受客戶端的連接請求,服務(wù)器必須調(diào)用 accept 函數(shù)。代理服務(wù)器就要求采用這種方式,在這種模型下,當(dāng)服務(wù)器程序的套接字創(chuàng)建并初始化完畢時(shí),它先進(jìn) 入休眠狀態(tài),直到有客戶機(jī)向該服務(wù)器程序提出連接請求。同時(shí),這也隱藏了內(nèi)部網(wǎng)絡(luò)結(jié)構(gòu),從而降低了內(nèi)部網(wǎng)絡(luò)受到攻擊的風(fēng)險(xiǎn)。 NAT 即網(wǎng)絡(luò)地址轉(zhuǎn)換( Network Address Translator),從廣義上講, ICS也是使用了一種 NAT 技術(shù),不過我們這里討論的 NAT 是指將運(yùn)行 Windows 2021 Server 的計(jì)算機(jī)作為 IP 路由器,通過它在局域網(wǎng)和 Inter 主機(jī)間轉(zhuǎn)發(fā)數(shù)據(jù)包從而實(shí)現(xiàn) Inter 的共享。它實(shí)際上相當(dāng)于一種網(wǎng)絡(luò)地址轉(zhuǎn)換器,所謂網(wǎng)絡(luò)地址轉(zhuǎn)換器就是當(dāng)數(shù)據(jù)包向前傳遞的過程中,可以轉(zhuǎn)換數(shù)據(jù)包中的 IP地址和 TCP/UCP 端口等地址信息。因此,從 IP包頭是看不出任何與外面通訊的信息的。通訊是分兩次的,先是機(jī)器和代理服務(wù)器通訊,再是代理服務(wù)器和目的地址通訊。 突破 IP訪問限制:使用它 可以訪問一些有 IP禁止訪問的服務(wù)器 , 因?yàn)榉怄i只禁止了你和目標(biāo)服務(wù)器的連接,但并沒有禁止你與代理服務(wù)器的連接 以及代理服務(wù)器與目標(biāo)服務(wù)器的連接。通過分析指定 IP地址,可以查詢到網(wǎng)絡(luò)用戶的目前所在地。當(dāng)然也有它不利的一面,如許多網(wǎng)絡(luò)黑客通過這種方法隱藏自己的真實(shí) IP 地址,而逃過監(jiān)視。 更重要的是: Proxy Server (代理服務(wù)器 )是 Inter鏈路級網(wǎng)關(guān)所提供的一種重要的安全功能,它的工作主要在開放系統(tǒng)互聯(lián) (OSI)模型的對話層。 很多人不知不覺中 就在用代理服務(wù)器共享上網(wǎng),比如 sygate,wingate,isa,ccproxy,NT 系統(tǒng)自帶的網(wǎng)絡(luò)共享等,它們可以提供企業(yè)級 的文件緩存,復(fù)制和地址過濾等服務(wù)。為了便于直接使用 Windows 提供的網(wǎng)絡(luò)編程接口,我們 使用 Microsoft Visual C++ 作為開發(fā)工具 ,利用 MFC 類庫中提供的兩個(gè) Socket 類 第 2 頁 共 20頁 CAsyncSocket 和 Csocket。另外,我們也能從中學(xué)習(xí)到正確的程序開發(fā)流程,積累程序開發(fā)經(jīng)驗(yàn),為以后更深課題的研究打好基礎(chǔ)。絕大多數(shù)企業(yè)、部門在使用 代理 服務(wù)器的時(shí)候,都會考慮這個(gè)問題,把它作為選購 代理 服務(wù)器產(chǎn)品的重要依據(jù)。不難看出,代理服務(wù)器在我們信息時(shí)代的生活中扮演著越來越重要的作用。可以這樣認(rèn)為,代理是雙向的。在保證系統(tǒng)基本功能的同時(shí),使用多線程機(jī)制使得代理系統(tǒng)有更好的延續(xù)性。 畢業(yè)設(shè)計(jì) ( 論文 ) 簡易代理服務(wù)器的設(shè)計(jì) 論文作者姓名: 申請學(xué)位專業(yè): 申請學(xué)位類別: 指導(dǎo)教師姓名(職稱): 論文提交日期: 簡易代理服務(wù)器的設(shè)計(jì) 摘 要 代理服務(wù)器是介于瀏覽器和 Web 服務(wù)器之間的一臺服務(wù)器,它的功能 是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息。此代理系統(tǒng)具有簡單,易用,網(wǎng)絡(luò)化等優(yōu)點(diǎn),能夠完成一般的 HTTP 訪問代理服務(wù) 。即對于內(nèi)部網(wǎng)上的用戶來說,代理服務(wù)器可看作是一個(gè)外部網(wǎng)的代理;對于外部網(wǎng)絡(luò)來說,代理服務(wù)器可以看作一個(gè)要訪問外部網(wǎng)的客戶。 本課題研究的意義 隨著 Inter 與 Intra 的飛速發(fā)展,作為連接 Inter 與 Intra的橋梁, 代理 服務(wù)器在實(shí)際應(yīng)用中發(fā)揮著極其重要的作用。目前市場上流行的 代理 服務(wù)器,像 Microsoft Proxy Server、 Netscape Proxy Server、 Win Gate 等 國外的產(chǎn)品, 功能和性能等方面都還不錯, 我們正好可以通過借鑒它們產(chǎn)品的優(yōu)點(diǎn) , 開發(fā)一個(gè)具有自主產(chǎn)權(quán)的代理服務(wù)器產(chǎn)品。 本課題的研究方法 此 代理 服務(wù)器 系統(tǒng) 將是 建立在 Windows NT 平臺上 的網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)。 使用 這兩個(gè) Socket 類 , 我們可以 運(yùn) 用面向?qū)ο蟮姆椒▉磉M(jìn)行 Socket 編程,而且它們還分別在較低和較高層次上封裝了 Windows Sockets API,為程序員開發(fā) Socket 程序提供了便利。 在一般情況下,我們使用網(wǎng)絡(luò)瀏覽器直接去連接其他 Inter 站點(diǎn)取得網(wǎng)絡(luò)信息時(shí),須