freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)-簡(jiǎn)易代理服務(wù)器的設(shè)計(jì)—論文-在線瀏覽

2025-02-03 17:42本頁(yè)面
  

【正文】 過(guò)這種方法隱藏自己的真實(shí) IP 地址,而逃過(guò)監(jiān)視。而且 通常代理服務(wù)器都設(shè)置一個(gè)較大的硬盤(pán)緩沖區(qū),當(dāng)有外界的信息通過(guò)時(shí),同時(shí)也將其保存到緩沖區(qū)中,當(dāng)其他用戶再訪問(wèn)相同的信息時(shí),則直接由緩沖區(qū)中取出信息,傳給用戶,從而達(dá)到提高訪問(wèn)速度的目 的 。通過(guò)分析指定 IP地址,可以查詢到網(wǎng)絡(luò)用戶的目前所在地。還有平日里我們最為常用的顯 IP版 ,在 “ 發(fā)送消息 ” 窗口中,可以查看對(duì)方的 IP 及解析出的地理 位置。 突破 IP訪問(wèn)限制:使用它 可以訪問(wèn)一些有 IP禁止訪問(wèn)的服務(wù)器 , 因?yàn)榉怄i只禁止了你和目標(biāo)服務(wù)器的連接,但并沒(méi)有禁止你與代理服務(wù)器的連接 以及代理服務(wù)器與目標(biāo)服務(wù)器的連接。其中透明代理一般是網(wǎng)關(guān),是硬件 ,所以不討論透明代理。通訊是分兩次的,先是機(jī)器和代理服務(wù)器通訊,再是代理服務(wù)器和目的地址通訊。代理服務(wù)器和目的地址通訊時(shí),源 IP 是代理服務(wù)器的 IP,當(dāng) 然 外部的數(shù)據(jù)也是一樣的 。因此,從 IP包頭是看不出任何與外面通訊的信息的。 目前的代理服務(wù)技術(shù) 代理服務(wù)技術(shù)是在一臺(tái) PC 機(jī)上安裝一套代理軟件,主要用于用戶對(duì)Inter 資源的訪問(wèn)。它實(shí)際上相當(dāng)于一種網(wǎng)絡(luò)地址轉(zhuǎn)換器,所謂網(wǎng)絡(luò)地址轉(zhuǎn)換器就是當(dāng)數(shù)據(jù)包向前傳遞的過(guò)程中,可以轉(zhuǎn)換數(shù)據(jù)包中的 IP地址和 TCP/UCP 端口等地址信息。 ICS 方式也稱(chēng)之為 Inter 轉(zhuǎn)換連接。 NAT 即網(wǎng)絡(luò)地址轉(zhuǎn)換( Network Address Translator),從廣義上講, ICS也是使用了一種 NAT 技術(shù),不過(guò)我們這里討論的 NAT 是指將運(yùn)行 Windows 2021 Server 的計(jì)算機(jī)作為 IP 路由器,通過(guò)它在局域網(wǎng)和 Inter 主機(jī)間轉(zhuǎn)發(fā)數(shù)據(jù)包從而實(shí)現(xiàn) Inter 的共享。網(wǎng)絡(luò)地址轉(zhuǎn)換 NAT 通過(guò)將專(zhuān)用內(nèi)部地址轉(zhuǎn)換為公共外部地址,對(duì)外隱藏了內(nèi)部管理的 IP 地址。同時(shí),這也隱藏了內(nèi)部網(wǎng)絡(luò)結(jié)構(gòu),從而降低了內(nèi)部網(wǎng)絡(luò)受到攻擊的風(fēng)險(xiǎn)。 Socket 面向連接的編程模型 代理服務(wù)器既然是雙向的客戶機(jī) /服務(wù)器模型,它工作時(shí)通常有一個(gè)公共的規(guī)則需要遵守,通信雙方需要共同遵守這個(gè)規(guī)則才能保證通信的有效進(jìn)行,如需要量傳輸大量語(yǔ)音信息時(shí)須采用一種無(wú)須建立連接的傳輸方式,在這種方式下,數(shù)據(jù)可以以較快的速度傳輸。代理服務(wù)器就要求采用這種方式,在這種模型下,當(dāng)服務(wù)器程序的套接字創(chuàng)建并初始化完畢時(shí),它先進(jìn) 入休眠狀態(tài),直到有客戶機(jī)向該服務(wù)器程序提出連接請(qǐng)求。這時(shí)雙方協(xié)商數(shù)據(jù)由誰(shuí)來(lái)接收和由誰(shuí)來(lái)發(fā)送,在數(shù)據(jù)傳輸完畢時(shí),雙方再分別關(guān)閉連接,釋放因創(chuàng)建套接字而占用的資源,面向連接的編程模型示意圖如下: 圖 1面向連接的編程模型 服務(wù)器方 客戶方Soket () , 建立流式套接字 , 返回套字句柄 li s ten _ s o c k e t .Bin d () , 關(guān)聯(lián)一個(gè)本地地址到套接字 li s ten _ s o c k e t .List e n () , 設(shè)置 b a c k log 值 , 進(jìn)入監(jiān)聽(tīng)狀態(tài) .Ac c p e t () , 等待接受客戶連接請(qǐng)求 .建立連接 , accept 函數(shù)返回 , 得到新的套接字 , 如 msg _ s o c k e t .Recv ()/ Send () , 在新套接字上收發(fā)數(shù)據(jù) , 直到完成交換Clo s e s o c k e t () , 關(guān)閉新的套接字 .Clo s e s o c k e t () , 關(guān)閉監(jiān)聽(tīng)套接字 ,服務(wù)結(jié)束 .Socket () , 建立流式套接字 .Conn ect () , 將套接字與服務(wù)器連接 .Recv ()/ s e n d () , 在套接字上收發(fā)數(shù)據(jù) , 直到數(shù)據(jù)完成交換 .Clo s e s o c k e t () , 關(guān)閉此套接字 , 結(jié)束 TCP 對(duì)話 . 第 5 頁(yè) 共 20頁(yè) 上面的示意圖向我們顯示了面向連接的服務(wù)器程序和客戶程序的創(chuàng)建與結(jié)束過(guò)程。為了接受客戶端的連接請(qǐng)求,服務(wù)器必須調(diào)用 accept 函數(shù)。當(dāng)服務(wù)器端的 accept 函數(shù)返回后, connect 函數(shù)也返回。 當(dāng)數(shù)據(jù)完成交換后,客戶程序和服務(wù)器程序都會(huì)分別關(guān)閉創(chuàng)建的套接字句柄以完成雙方的對(duì)話,至此程序服務(wù)結(jié)束。 Winsock庫(kù)的裝 入時(shí)是對(duì) Winsock DLL版本的進(jìn)行選擇 ,每個(gè) Winsock應(yīng)用程序 都 必須加載 與之 相應(yīng)的版本的 Winsock DLL。 它的第一個(gè)參數(shù)就是要加載的庫(kù)版本,第二個(gè)參數(shù)是用來(lái)返回 DLL 庫(kù)的詳細(xì)信息的。 TCP/IP使用地址和端口號(hào)來(lái)指定一個(gè)地址,但是其它協(xié)議也許采用不同的形式。在 Winsock中,應(yīng)用程序員通過(guò) SOCKADDR_IN 結(jié)構(gòu)來(lái)指定 IP地址和端口號(hào)。 u_short sin_port。 har sin_zero[8]。 應(yīng)用程序可以使用 i_addr函數(shù)將一個(gè)小數(shù)點(diǎn)分隔的 十進(jìn)制 IP地址字符串轉(zhuǎn)化成由 32 位二進(jìn)制數(shù)表示的 IP 地址。注意: i_addr 返回的 32 位二進(jìn)制數(shù)是用網(wǎng)絡(luò)順序存儲(chǔ)的。 Winsock 提供了一些函數(shù)來(lái)處理本地機(jī)器的字節(jié)順序和網(wǎng)絡(luò)字節(jié)順序的轉(zhuǎn)換, htons 將主機(jī)字節(jié)順序轉(zhuǎn)化到 TCP/IP 網(wǎng)絡(luò)字節(jié)順序, ntohs 將 網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)化到主機(jī)字節(jié)順序,此外還有 htonl 和 ntohl。使用它們可以保證程序正確運(yùn)行在所有機(jī)器上。當(dāng)不使用此套接字時(shí),應(yīng)該用 closesocket函數(shù)關(guān)閉套接字,如果沒(méi)有錯(cuò)誤發(fā)生,函數(shù)返回 0,否則返回 SOCKET_ERROR。 bind()將套接字地址(包括本地主機(jī)地址和本地端口地址)與所創(chuàng)建的套接字號(hào)聯(lián)系起來(lái),即將名字賦予套接字, 以便能夠有效地標(biāo)識(shí)套接字。否則返回值 SOCKET_ERROR。這時(shí)系統(tǒng)會(huì)默認(rèn)地為套接字綁定一個(gè)本地端口值。綁定到套接字上的本地名稱(chēng)包括主機(jī)地址、協(xié)議號(hào)和端口號(hào) 3部分。為了接受連接,首先使用 socket函數(shù)創(chuàng)建套接字,然后使用 bind 函數(shù)將它綁定到本地地址,再用 listen 函數(shù)為到達(dá)的連接指定 backlog,最后使用 accept 函數(shù)接受請(qǐng)求的連接。函數(shù)執(zhí)行成功后,套接字 將 進(jìn)入被 動(dòng)模式,到來(lái)的連接會(huì)通知要排隊(duì) 并 等候接受處理。 建立套接字連接- connect()和 accept() 這兩個(gè)系統(tǒng)調(diào)用用于完成一個(gè)完整相關(guān)的建立, 用于 客戶機(jī)與網(wǎng)絡(luò)中的服 第 7 頁(yè) 共 20頁(yè) 務(wù)器建立連接時(shí),用 connect()這個(gè)調(diào)用連接將請(qǐng)求發(fā)到偵聽(tīng)方。 收發(fā)數(shù)據(jù) send()和 recv() 對(duì)流套接字來(lái)說(shuō),一般使用 send 和 recv 函數(shù)來(lái)收發(fā)數(shù)據(jù)。 Recv 函數(shù)從對(duì)方接收數(shù)據(jù),并將其存儲(chǔ)到指定的緩沖區(qū)。 3 設(shè)計(jì)方案 基本函數(shù)設(shè)計(jì) 我們根據(jù)上面討論的代理服務(wù)器內(nèi)容容易畫(huà)出代理服務(wù)器的簡(jiǎn)單流程模型: 圖 2 代理服務(wù)器的流程 從圖中看出,我們需要設(shè)計(jì)的基本 功能函數(shù)為 ClientToProxy 和ProxyToServer。ProxyToServer 用于 接收 Server 的數(shù)據(jù)、傳給請(qǐng)求 Client。這需要設(shè)計(jì)一個(gè)函數(shù)來(lái)解析地址,設(shè)計(jì)過(guò)程中用 ReceiveInformation 函數(shù)來(lái)實(shí)現(xiàn)。考慮到一個(gè)應(yīng)用程序通常用“時(shí)間”服務(wù)對(duì)應(yīng)的端口來(lái)和服務(wù)器連接,而服務(wù)器提供某種機(jī)制來(lái)通知用戶使用另一端口,因此 gethostbyname()函數(shù)返回的端口號(hào)已經(jīng)是網(wǎng)絡(luò)順序了,可以直接用來(lái)組成一個(gè)地址,而不需要進(jìn)行轉(zhuǎn)換。相應(yīng)地,應(yīng)用C lien t P ro x y Se rv e r數(shù)據(jù)請(qǐng)求 轉(zhuǎn)發(fā)請(qǐng)求返回請(qǐng)求數(shù)據(jù) 回應(yīng)數(shù)據(jù)C lien tT o P ro x yP ro x y T o S e rv e r 第 8 頁(yè) 共 20頁(yè) 程序希望顯示包 含于某一地址中的端口號(hào),這一端口號(hào)就必須在被顯示前從網(wǎng)絡(luò)順序轉(zhuǎn)換到主機(jī)順序( ntohs)。其基本規(guī)劃如下: 1. 等待來(lái)自客戶( Web 瀏覽器)的請(qǐng)求 2. 啟動(dòng)一個(gè)新的線程,以處理客戶連接請(qǐng)求 3. 讀取瀏覽器請(qǐng)求的第一行(該行內(nèi)容包含了請(qǐng)求的目標(biāo) URL) 4. 分析請(qǐng)求的第一行內(nèi)容,得到目標(biāo)服務(wù)器的 地址 和端口 5. 打開(kāi)一個(gè)通向目標(biāo)服務(wù)器(或下一個(gè)代理服務(wù)器,如合適的話)的 Socket 6. 把請(qǐng)求的第一行發(fā)送到輸出 Socket 7. 把請(qǐng)求的剩余部分發(fā)送到輸出 Socket 8. 把目標(biāo) Web 服務(wù)器返回的數(shù)據(jù)發(fā)送給發(fā)出請(qǐng)求的瀏覽器 當(dāng)然,如果考慮細(xì)節(jié)的話,情況會(huì)更復(fù)雜一些。有幾種方法可以實(shí)現(xiàn)這兩個(gè)目標(biāo),但每一種方法都有各自的代價(jià)。另外,數(shù)據(jù)的發(fā)送和接收也可以使用多個(gè)獨(dú)立的線程,但大量地創(chuàng)建和 拆除線程也會(huì)帶來(lái)性能問(wèn)題。 4 服務(wù)器的實(shí)現(xiàn) 環(huán)境創(chuàng)建 設(shè)計(jì)使用 Visual C++ 作為編程工具,采用 Windows XP 系統(tǒng)平臺(tái)。在 VC主窗口中,執(zhí)行主菜單“ File” /“ New” 命令,建立一個(gè)控制臺(tái)應(yīng)用程序類(lèi)型的工程,工程名為“ MiniProxy”;點(diǎn)擊“ OK”后選擇“ an application that supports MFC” ,之后一直確定 ,完成項(xiàng)目工程的創(chuàng)建工作。運(yùn)用結(jié)構(gòu)體 Str_BasalSocket,里面定義客戶端到代理服務(wù)器及代理服務(wù)器到 Server 間套接字兩個(gè),以及客戶端、代理服務(wù)器和 Server 間的連接狀態(tài)變量?jī)蓚€(gè); Str_ProParam 結(jié)構(gòu)體定義 Server 地址變量,指向結(jié)構(gòu)體 Str_BasalSocket 的指針,聯(lián)結(jié) Server 主機(jī)的端口變量和代理服務(wù)器到Server 連接狀態(tài)的句柄變量,這個(gè)結(jié)構(gòu)體是用來(lái)代理服務(wù)器與 Server 主機(jī)交換信息 。實(shí)現(xiàn)為: WSADATA wsaData。wsaData)!=0) { printf(\nError in Startup session.\n)。 return 1。為了將本地地址附加到所創(chuàng)建的套接字上以便能夠有效地標(biāo)識(shí)套接字,我們需用 bind 函數(shù)來(lái)完成這一步: SOCKET listen_socket。 定義用于保存 socket 信息的變量。 地址家族用于指定地址格式。 此處將 本機(jī) IP 地址填入 此變量。 字節(jié)順序轉(zhuǎn)換函數(shù) 用于將 將 u_short類(lèi)型變量 port從 主機(jī)字節(jié)順序轉(zhuǎn)化到TCP/IP 網(wǎng)絡(luò)字節(jié)順序 (即: host to nework short)。 if(::bind(listen_socket,(sockaddr *)amp。 WSACleanup()。 } 第 11 頁(yè) 共 20頁(yè) 綁定完成后,緊接著就將此套接字置入監(jiān)聽(tīng)以準(zhǔn)備接受客戶端的連接請(qǐng)求,調(diào)用 listen 函數(shù), ::listen(listen_socket,5),最后就可以啟動(dòng)處理線程進(jìn)行偵聽(tīng)。 當(dāng)客戶端有請(qǐng)求發(fā)到代理服務(wù)器時(shí),偵聽(tīng) 中的 Proxy 就會(huì)調(diào)用函數(shù) accept來(lái)響應(yīng)對(duì)主機(jī)的連接請(qǐng)求,同時(shí) Proxy 會(huì)啟動(dòng)另一個(gè)偵聽(tīng)線程,以準(zhǔn)備接收客戶端的下一個(gè)請(qǐng)求。from,amp。 此處 接收客戶端的連接請(qǐng)求 ,返回客戶端的地址和端口。 啟動(dòng)另一偵聽(tīng) ,用來(lái)處理客戶端傳來(lái)的另一個(gè)請(qǐng)求。 =FALSE。 =msg_socket。 如果從套接字接收數(shù)據(jù)失敗,用下面代碼給出提示,同時(shí)關(guān)閉 socket 句柄,設(shè)置客戶端到服務(wù)器的狀態(tài)為關(guān)閉。 if(==FALSE) { closesocket()。 } } 當(dāng)客戶端關(guān)閉連接時(shí),這時(shí)接收的數(shù)據(jù)為 0,也需要將此時(shí) socket 狀態(tài)進(jìn)行調(diào)整: printf(Client Close connection\n)。 =TRUE。為此,需要解析出 Server的地址, 創(chuàng)建函 數(shù) ReceiveInformation 來(lái) 實(shí)現(xiàn)此 功能, 即聲明 int ReceiveInformation( char * str, char *address, int * port),其中將實(shí)現(xiàn): char buf[MAXBUFFERSIZE], mand[512], proto[128]。mand用于保存 get,con,user等命令,這里顯然是 get。 p=strstr(buf,HTTP)。如果分析出請(qǐng)求是 HTTP 協(xié)議類(lèi)型的,將進(jìn)行如下處理,首先將字符串協(xié)議部份去掉,把地址存于 address 參數(shù)中,端口設(shè) 為缺省的 80,最終返回這些信息,成功解析出 Server 端的地址信息。這個(gè)功能將在下面實(shí)現(xiàn)。 retval=send(,Buffer,Len,0)。 closesocket()。 同時(shí)代理繼續(xù)接收客戶端的請(qǐng)求,成功時(shí)返回接收的字節(jié)數(shù),錯(cuò)誤時(shí)顯示出錯(cuò)信息,關(guān)閉客戶端到代理服務(wù)器的套接字,設(shè)置連接狀態(tài)為關(guān)閉。 retval=recv(,Buffer,sizeof(Buffer),0)。否則返回接收信息。 ifdef _DEBUG Buffer[Len]=0。 第 13 頁(yè) 共 20頁(yè) endif 請(qǐng)求響應(yīng) 這一步中,完成 ProxyToServer 函數(shù)的實(shí)現(xiàn)。 Str_ProParam * pPar=(Str_ProParam*)pParam; char *server_name= localhost。 struct hostent *hp。 SOCKET conn_socket。 將 socket_type 類(lèi)型設(shè)定為流式套接字類(lèi)型,用上面分析出的
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1