




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Cfgdemo項目分析WEBServer 工作原理及其應(yīng)用編程方法說到 WEBServer,就不能不提到 HTTP 協(xié)議HTTP 是 HyperTextTransferProtocol 的縮寫,中文譯稱超文本傳輸協(xié)議。它和 FTP 協(xié)議一樣,都是基于 TCP 的應(yīng)用層協(xié)議,但它們服務(wù)器端使用的端口號不一樣:通常情況下,F(xiàn)TP 使用的端口號是20(數(shù)據(jù)鏈接)、21(控制鏈接),而 HTTP 使用的端口號是 80。HTTP 協(xié)議是一個采用的請求/響應(yīng)模型的協(xié)議。HTTP 協(xié)議最典型的應(yīng)用是在 WEB 服務(wù)器和 WEB 瀏覽器之間傳遞數(shù)據(jù)。下面舉個例子來說明 WEB 瀏覽器和 WEB 服務(wù)器之間的交
2、互過程:1)網(wǎng)絡(luò)環(huán)境附注:服務(wù)器端包括兩個文件:index.html 和 tibug.gif2)建立鏈接在 HTTPClient(WEB 瀏覽器 IE)和 HTTPServer(WEB 服務(wù)器)進(jìn)行數(shù)據(jù)傳遞的之前,需要在兩者之間建立一個 TCP 鏈接,用于在兩者之間傳輸 HTTP 報文。當(dāng)我們在 IE 的地址欄里輸入:4index.html 并回車時,可以用軟件 sniffer捕獲 H1 和 H2 之間的傳輸數(shù)據(jù)。在分析報文數(shù)據(jù)之前,我們先來分析一下它的含義:http:/:代表超文本傳輸協(xié)議,一般情況下不用輸入(默認(rèn)的)4:代表 WEB
3、服務(wù)器的地址(http:已暗示服務(wù)器端端口號為 80)index.html:代表根目錄下的網(wǎng)頁文件因此這句話的含義就是獲取服務(wù)器上 4:80 根目錄下的 index.html 文件。用 sniffer 捕獲到的前三個包分析結(jié)果如下:序號源端地址目的地址包內(nèi)容備注15:19034:80SYN同步24:805:1903SYN+ACK同步+應(yīng)答35:19034:80ACK應(yīng)答由此可見這三個 TCP 包是用來并成功地在 HTTPClient(臨時端口
4、 1903)和 HTTPServer(固定端口 80)之間建立一個 TCP 鏈接。3)提交獲取 index.html 文件的請求建立好鏈接之后,客戶端會向服務(wù)器端發(fā)一個 HTTP 報文來請求獲取 index.html 文件,用sniffer 捕獲的結(jié)果如下:第TCP:TCPheaderjgTCP:TCP:Sourceport-1303KTCP:Destinationport=8C(UWU/WU-HTTP/HTTP)TCP:Sequencenumber-6043E8S0STCP:FesteKpectedSeqnumber=6043E3870QTCP:Acknowledgmentnumber=12
5、33263539口TCP:Dataoffset-20bytesTCFReservedBits:ReservedforFutureUse爵TCP:FLags=IE5TCP:l-l=(Nourgentpointer)Q-=Acknow1edgMent幽TCP:=PushTCP:.L0=(Ncreset)TCP:口=(NoSYN)口=(NoFIN)TCP:Uindo卯-655350IF.Checksum=90C4(correct)居TCP:Urgentpointer=0aTCP:NoTCPoptions國TCP:364BytesofdataRTCP:F?氈HTTP:HypertextTransfer
6、Protocol*HTTP:GET/HTTP/1.1Accept:imagegif,QHTTP:3:Accept-Language:zh-cnQHTTP:4:Accept-Encoding:gzip,deflateAHTTP:5:User-Agent:Mozilla4.0BHTTP:6:Host:192168.1.54QHTTP:7:Connection:Keep-Alive.HTTP:8:BHTTP:從該報文的 TCP 報頭可知該 HTTP 報文大小為 364 字節(jié), 從 HTTP 報頭可以看出該 HTTP 報文僅僅含有 HTTP 包頭,而沒有數(shù)據(jù)。HTTP 報頭分為 8 行,每行以回車-換
7、行符(CRLFrn)結(jié)束。其中第一行稱為 Request-Line,HTTP 協(xié)議為它定義了一個具體的語法格式:MethodRequest-URIHTTP/1.1CRLF這里,Method=GET、Request-RUI=/index.html(/和/index.html 一樣),服務(wù)器端處理這樣的Request-Line 時會解釋為客戶端請求獲取服務(wù)器根目錄下的 index.html 文件。第 2-7 行一起稱為一個 Header,其中每一行稱為一個頭域,每一個頭域又由域名、冒號和域值三個部分組成,它們是用來告訴服務(wù)器一些與客戶端相關(guān)的信息,讓服務(wù)器據(jù)此來做一些決策。最后一行由回車-換行符組
8、成。7TIPD=l?21681,54S1S2,168.1.55LEK=384ID=S713S接下來,我應(yīng)該注意到 TCP 包頭中 PUSH 位置 1 了,表示客戶端要求服務(wù)器端盡快把這個包交給應(yīng)用層, 這時, 服務(wù)器端向客戶端發(fā)送一個應(yīng)答, 表示服務(wù)器端已經(jīng)這個報文交給了應(yīng)用層去處理。 用 sniffer捕獲到的前三個包分析結(jié)果如下:序號源端地址目的地址包內(nèi)容備注54:805:1903ACK應(yīng)答4)獲取 index.html 文件接下來服務(wù)器端就向客戶端傳輸 index.html 文件。由于 index.html 文件的大小為 3078 字節(jié), 而
9、TCP 包最大的數(shù)據(jù)容量也就 1460 (1460=1500-20-20,HTTP 包的最大數(shù)據(jù)容量比 1460 還要小,因為還要扣除 HTTP 包頭),因此,要分多個 TCP 包才能完成此文件的傳輸。使用 sniffer 捕獲的結(jié)果如下(只截取了 HTTP 包頭部分):SHTTP:VectorOffsetLengthFraneHTTP:FAHTTP:00 x003614606HTTP:10 x003614607BHTTP:2CxO036436SkAHTTP:HTTP:3356bytesofre-assenbleddata.BETTP:HTTPHypertext-TransferProtoco
10、l-5HTTP:BETTP:1:HTTP/11200OKHTTP2:Date:Ved,20Oct200403:04:41GKTHTTP:3:Server:Apache/2.0.40(RedHatLinux)國HTTP:4:Last-Modified:Tue,19Oct200403:42:05GMT:BHTTP:S:ETag:i,15ea3f-ct)6-de25dl4O-HTTP:6:Accept-Ranges:bytesriHTTP:7:Content-Length:3078QHTTP:8:Connection:closeMHTTPq:Content-Type:test/htiwl;chars
11、et=ISO-8BS9-lQHTTP:10:從這里可以看出,服務(wù)器端的數(shù)據(jù)是分三次傳送到客戶端的,TCP 協(xié)議傳送的數(shù)據(jù)字節(jié)數(shù)為 3356(3356=1460+1460+436),HTTP 報文數(shù)據(jù)的字節(jié)數(shù)為 3078(Content-Length)。這里面,為什么 TCP協(xié)議傳送的數(shù)據(jù)字節(jié)數(shù)比 HTTP協(xié)議傳送的數(shù)據(jù)字節(jié)數(shù)要多 278呢?這是由于第一個 TCP報文數(shù)據(jù)里包含了 278 個字節(jié)的 HTTP 報頭,也就是上圖標(biāo)有行號的 1-10 共十一行數(shù)據(jù)。 這里的 HTTP報頭稱為 Full-Response報頭, 分為 11行。 其中第一行成為 Response-Line,HTTP協(xié)議為它
12、定義了一個具體的語法格式:HTTP/1.1Status-CodeReason-PhraseCRLF這里,Status-Code=200,Reason-Phrase=OK,客戶端處理這樣的 Response-Line 時會解釋為服務(wù)器端正確響應(yīng)了客戶的請求。第 2-9 行一起稱為一個 Header,其中每一行稱為一個頭域,每一個頭域又由域名、冒號和域值三個部分組成。它們是用來告訴客戶器一些相關(guān)的信息,譬如:服務(wù)器端響應(yīng)客戶端的數(shù)據(jù)長度由Content-Length:3078”頭域表示;接收完數(shù)據(jù)之后是否關(guān)閉該 TCP 鏈接由Connection:close”表示;傳送的數(shù)據(jù)格式由“Content
13、-Type:text/html”表示等。最后一行由回車-換行符組成。至此,index.html 文件就傳送到客戶端,并由客戶端的 IE 瀏覽器進(jìn)行解釋顯示了。5)關(guān)閉鏈接我們再來看看第 4)步中 3 個 TCP 報文中的最后一個,用 sniffer 捕獲并分析,結(jié)果如下(僅分析TCP 包頭):這里看出 Push 和 FIN 位都置上了 1,表示服務(wù)器端要求客戶端盡快把這個包提交給應(yīng)用層(Push)并斷開這個 TCP 鏈接(FIN)。客戶端作出應(yīng)響應(yīng)并配合斷開這個鏈接。用 sniffer捕獲到的前三個包分析結(jié)果如下:序號源端地址目的地址包內(nèi)容備注95:1903192.168
14、.1.54:80ACK應(yīng)答105:19034:80FIN114:805:1903ACK應(yīng)答至此,一次完整的 TCP 鏈接的建立 HTTP 請求 HTTP 響應(yīng) TCP 鏈接的斷開過程就完成了。6)IMG 標(biāo)號的處理當(dāng)客戶端 IE 瀏覽器解釋并顯示 index.html 文件時,會發(fā)現(xiàn)里面有這樣一條語句:它表示該 index.html 文件中插入了一個名為 tibug.gif 的圖形文件, 顯示寬度位 236 個象素,同時也告知了該文件位于 WEB 服務(wù)器的根目錄下。但是在前面的傳輸過程中并沒有把該文件傳輸?shù)?/p>
15、客戶端,所以 IE 瀏覽器為了能完整的顯示 index.html 文件,就必須得重新建立 TCP 鏈接,通過 HTTP 協(xié)議把該文件傳過來。其過程同獲取 index.html 文件的過程基本相同。用 sniffer 捕獲到并分析,其結(jié)果如下:序號源端地址目的地址包內(nèi)容備注125:19044:80SYN同步134:805:1904SYN+ACK同步+應(yīng)答145:19044:80ACK應(yīng)答155:19044:80PUSH+H
16、IIPHTTP 請求164:805:1904ACK應(yīng)答174:805:1904HTTPHTTP 響應(yīng)184:805:1904PUSH+HTTPHTTP 響應(yīng)TCPheader典典11圖aBaB3smsQPTCSourceportDextinaticnportSequencenumber=80(WVV/UUW-HTTP/HTTF)=1903-1233266519NextexpectedSeqnumber_123326b956=604358670=20bytesfor
17、FutureUse=19Acknow1edgmentnumberDataoffsetReservedBits:ReservedFLags0.WindowChecksumUrgentpointerNoTCPoptions436Bytesofdata(NourgentpointerAcknouledgmentPush(Noreset)(NoSYN)FIN64322527(correct)0194:805:1904FIN+ACK斷開+應(yīng)答205:19044:80ACK應(yīng)答215:190419
18、4:80FIN224:805:1904ACK應(yīng)答至此,index.html 就可以完整的顯示出來了。7)CGI 程序IE 瀏覽器顯示出 index.html 文件后(顯示結(jié)果如下圖所示),我們可以看到有兩個按鈕:ViewConfiguration和ChangePassword,客戶端可以通過單擊該按鈕來向服務(wù)器端提交客戶輸入的信息。下面我們來分析后者-更改用戶密碼-的實現(xiàn)過程。Password:configurationpasswordpassword,andthenewpasswordinthespacesbelow.UserPa
19、ssword:EnterNewPassword:IReTypeNewPassword:ChangePassurord我們在 UserPassword 文本框中輸入 CONFIG(默認(rèn)密碼),在 EnterNewPassword 文本框中輸入 QIANYONG 作為新密碼,再在 Re-TypeNewPassword 文本框中輸入 QIANYONG 進(jìn)行確認(rèn),然后點擊ChangePassword按鈕,這樣客戶端就完成了密碼修改工作。下面用 sniffer捕獲這個過程的交互過程。首先要在客戶端和服務(wù)器端建立一個 TCP 鏈接,用來進(jìn)行 HTTP 協(xié)議的傳輸,所以用sniffer 捕獲的前三個包分析結(jié)
20、果如下:序號源端地址目的地址包內(nèi)容備注235:19054:80SYN同步244:805:1905SYN+ACK同步+應(yīng)答255:19054:80ACK應(yīng)答接著用 sniffer 捕獲的包如下(這里只截取了 HTTP 報文部分)購HTTPHypertextTransferProtocolHTTP:HTTP:1: POSTzcfgpassogiHTTP/1.1HTTP2Accept:iftagegif,image/x-xbitmap,image/jpegHTTP:3:
21、 Refer&r:http:Z/LS4/HTTP:4: Accept-Lengviage:zhcnHTTP5: Content-Type:application/u-ww-form-ur1encodedHTTP:6: Accept-Encoding:gzip,deflateHTTP:7; Uer-Agent:MozxLla/4.0HTTPS: Host:192.163,154HTTP:9: Content-Length:51HTTP10:Connection:Keep-AliveHTTP:HTTP:11:12:Cache-Control:no-cacheHTTP:HTTP:1
22、3:Content:(Sibytescfdata)從這里可以看出,HTTP 報文由兩部分組成:1-12 行表示的 HTTP 報頭,13 行表示的的ChangeUserTochangetheentertheoldHTTP 報文數(shù)據(jù)(51 字節(jié))。報頭的第一行是一個 Request-Line,如前所述,HTTP 協(xié)議為它定義了一個具體的語法格式:MethodRequest-URIHTTP/1.1CRLF這里,Method=POST、Request-RUI=/cgfpass.cgi,其中 POST 表示客戶端要向服務(wù)器端提交長度為 Content-Length 的數(shù)據(jù),/cfgpass.cgi 表示
23、提交的數(shù)據(jù)要交由服務(wù)器端根目下的名為 cfgpass 的 CGI程序來處理。因此,服務(wù)器端接收到這樣的一個 Request-Line 后會解釋為客戶端請求服務(wù)器調(diào)用根目錄下的名為 cfgpass 白CGI 程序來處理以 HTTP 協(xié)議傳輸?shù)膱笪臄?shù)據(jù)。2-11 行稱為 Header,它們是用來告訴服務(wù)器一些相關(guān)的信息。12 行為一個回車-換行符。接下來的就是 51 字節(jié)的 HTTP 報文數(shù)據(jù):password=CONFIG&passnew1=QIANYONG&passnew2=QIANYONG大家可以看出 CONFIG、QIANYONG、QIANYONG 是由客戶端輸入的。那么為什么點擊Chan
24、gePassword會產(chǎn)生這樣的報文數(shù)據(jù)呢?這與 IE 瀏覽器以及 html 文件有關(guān)。我們看 index.html文件中如下一段代碼:ChangeUserPassword:Tochangetheconfigurationpassword,entertheoldpassword,andthenewpasswordinthespacesbelow.UserPassword:EnterNewPassword:Re-TypeNewPassword:INPUTtype=submitvalue=ChangePassword”如果你了解 HTML 語言的話,那么不難理解上面這段用 HTML 語言寫程序,其
25、中關(guān)鍵部分我用紅色自己標(biāo)識出來。FORM 的 action 屬性指定了 Request-Line 中的 Request-URI 為cfgpass.cgimethod 屬性指定了 Request-Line 中的 Method 為 POST。FROM 中的 INPUT 的 name屬性指定了要提交的數(shù)據(jù)的域名為 password、passnew1、passnew2,客戶端用戶輸入的數(shù)據(jù)稱為域值,與其對應(yīng)的域名一起構(gòu)成一個域。當(dāng)點擊 type=submit 類型的按鈕時,瀏覽器會將這些域按照一定的格式、 通過 HTTP 協(xié)議發(fā)到服務(wù)器端。 格式規(guī)定如下:域 1&域 2域名=域值IloveyouI+l
26、ove+you!%21(0 x250 x320 x31)1)各個域用&分隔:2)在每個域中,用二分隔域名和域值:一個域中的空格需轉(zhuǎn)換為+:4)其他特定的鍵盤字符被編號為十六進(jìn)制值:知道這些格式規(guī)定以后,我們就應(yīng)該能夠很好地理解 cfgdem。項目中函數(shù) cgiParseVars的源代碼。NDKXCGI 程序的接口有一個統(tǒng)一的規(guī)定:intcgi_xxx(inthtmlSock,intContentLength,char*pArg)其中參數(shù) htmlSock 是一個套接字,CGI 程序可以利用該套接字和客戶端進(jìn)行通信。參數(shù)ContentLength 指定了 CGI 程序需要處理的 HTTP 報文數(shù)
27、據(jù)的長度。參數(shù) pArg 指向一個以、0結(jié)束的字符串。當(dāng) Method=POST 時,CGI 程序應(yīng)該調(diào)用 recv 從該套接字 htmlSock 上接收長度為ContentLength 的 HTTP 報文數(shù)據(jù), 當(dāng) Method=GET 時, CGI 不需調(diào)用 recv 去從套接字 htmlSock 上接收 HTTP 報文數(shù)據(jù),此時 CGI 需要處理的數(shù)據(jù)在 pArg 指向的字符串中。因此編寫 CGI 程序的流程如下:1)首先,CGI 程序需要判斷字符串指針 pArg 指向的字符串是否為 NULL:如果是,那么要處理的是一個 POST 方法,如果不是,那么要處理的是一個 GET 方法;2)如果 CGI 程序要處理的是 POST 方法,那么按下列步驟編寫程序:a)動態(tài)分配字節(jié)數(shù)為 ContentLength+1 的緩沖區(qū);b)調(diào)用 recv 從套接字 htmlSock 上接收 ContentLength 個字節(jié)的數(shù)據(jù)到該緩沖區(qū);c)在把緩沖區(qū)的最后一個字節(jié)設(shè)置為0;如果 CGI 程序要處理的是GET 方法,那么此步可以忽略;3)解析、處理該接收到的數(shù)據(jù)(POST)或字符串指針 pArg 指向的字符串(GE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地震預(yù)警員崗位面試問題及答案
- 櫥柜設(shè)計師崗位面試問題及答案
- 寵物醫(yī)生崗位面試問題及答案
- 沖壓工程師崗位面試問題及答案
- 2025屆陜西省寶雞市金臺高級中學(xué)高二化學(xué)第二學(xué)期期末監(jiān)測試題含解析
- 2025屆河南省商丘市城隍鄉(xiāng)湯莊中學(xué)高二下化學(xué)期末聯(lián)考模擬試題含解析
- 安徽省定遠(yuǎn)縣張橋中學(xué)2025年化學(xué)高二下期末學(xué)業(yè)水平測試模擬試題含解析
- 2025屆廣東省揭陽市惠來一中化學(xué)高二下期末學(xué)業(yè)水平測試模擬試題含解析
- 福建省福州市屏東中學(xué)2025屆高二下化學(xué)期末調(diào)研模擬試題含解析
- 四川省成都市溫江中學(xué)2025屆高一下化學(xué)期末經(jīng)典模擬試題含解析
- 2024年中國安全應(yīng)急產(chǎn)業(yè)發(fā)展研究報告
- 2024年優(yōu)居房產(chǎn)加盟業(yè)務(wù)保密協(xié)議3篇
- 中國當(dāng)代文學(xué)專題-003-國開機(jī)考復(fù)習(xí)資料
- 企業(yè)自然災(zāi)害安全應(yīng)急預(yù)案
- 高新技術(shù)企業(yè)研發(fā)費用管理辦法
- 老年急重癥診療及護(hù)理
- 中小學(xué)家長會期中期末家長會253
- 驅(qū)動電機(jī)與電機(jī)控制器
- 醫(yī)聯(lián)體協(xié)議書(2024版)
- 2023年全國職業(yè)院校技能大賽-中藥傳統(tǒng)技能賽項規(guī)程
- 11 《愛蓮說》對比閱讀-2024-2025中考語文文言文閱讀專項訓(xùn)練(含答案)
評論
0/150
提交評論