使用網(wǎng)絡(luò)分析軟件學(xué)習(xí)HTTP協(xié)議(精)
使用網(wǎng)絡(luò)分析軟件學(xué)習(xí) HTTP 協(xié)議一、 目的學(xué)習(xí)網(wǎng)絡(luò)分析也有段時(shí)間了, 到現(xiàn)在也算是逐漸入門了吧, 想想自己以前剛接觸時(shí), 不知道 從何入手。學(xué)習(xí)網(wǎng)絡(luò)分析,肯定要從協(xié)議入手,如果只看相關(guān)資料,這樣印象不深刻,而且 也沒什么實(shí)戰(zhàn)的經(jīng)驗(yàn), 速度和效率都慢了很多。 后來有高人指點(diǎn)了我, 用網(wǎng)絡(luò)分析軟件來學(xué) 習(xí)協(xié)議比較好, 從此我開始了另外一種方法的學(xué)習(xí)。 呵呵, 自己作為一個(gè)初學(xué)者, 想把自己 學(xué)習(xí)的方法寫出來,和大家交流交流,個(gè)人認(rèn)為方法是最重要的。TCP/IP協(xié)議族里的協(xié)議太多了,這個(gè)還的靠時(shí)間的積累:說了這么多廢話,嘿嘿!其實(shí)應(yīng)用層協(xié)議是我們經(jīng)常用到的協(xié)議,比如 HTTP , FTP 等等,下面我們就來談?wù)?HTTP 協(xié)議(不看網(wǎng)頁不可能吧 -.-# ,學(xué)習(xí)其他協(xié)議時(shí)可以用類似的方法,靈活變通 。 o二、 試驗(yàn)環(huán)境我們這里試驗(yàn)的網(wǎng)絡(luò)環(huán)境很簡(jiǎn)單,簡(jiǎn)單描述一下:1. 網(wǎng)絡(luò)環(huán)境 :本人電腦通過代理服務(wù)器 ADSL 撥號(hào)上網(wǎng),本機(jī) IP=192.168.0.92;2. 操作系統(tǒng) :本人電腦使用 Windows XP+SP2;3. 工具 (關(guān)鍵喲 :我接觸過 Sniffer , OmniPeek , ethereal ,科來網(wǎng)絡(luò)分析系統(tǒng),個(gè)人相對(duì) 這幾種軟件用的稍微熟悉的還是 OmniPeek ,這里我就以 OmniPeek 為學(xué)習(xí)工具。三、 具體操作我試驗(yàn)過程也很簡(jiǎn)單, 訪問網(wǎng)頁大家都很清楚吧?我這里只是用更加深入的方式來了解訪問 網(wǎng)頁的種種過程及原理,具體操作如下:1. 打開 OminPeek 的設(shè)置, 在 Filers 里面設(shè)置 Address filer:192.168.0.92和 protocl filter選 擇 HTTP 協(xié)議,如圖 1,(圖 1 過濾器設(shè)置說明:通過設(shè)置圖 1的過濾器, 我們就可以只捕獲 192.168.0.92使用 HTTP 協(xié)議的通訊了: 2. 開始捕獲,使用主機(jī) 192.168.0.92訪問網(wǎng)頁 ,抓取數(shù)據(jù)包,如圖 2, (圖 2 抓取的數(shù)據(jù)包說明:呵呵,準(zhǔn)備就緒,開始捕獲,我們?cè)L問 http:www.csna.cn論壇,捕獲到的數(shù)據(jù)包。 四、 原理知識(shí)使用網(wǎng)絡(luò)分析軟件進(jìn)行對(duì)協(xié)議學(xué)習(xí), 并不是叫我們都拋開那些資料, 那些理論原理, 我這里 所說的就是“結(jié)合” ,了解協(xié)議的結(jié)構(gòu),工作原理,相關(guān)特征是很重要的,這時(shí)我們?cè)谕ㄟ^ 網(wǎng)絡(luò)分析軟件來操作, 就會(huì)更加明確。 我們還是先介紹一下 HTTP 協(xié)議的工作原理吧 (不要 怪我羅嗦喲 。1. TCP/IP分層結(jié)構(gòu)TCP/IP的層次結(jié)構(gòu)和工作原理,我們就不詳細(xì)介紹了,這里就針對(duì) HTTP 進(jìn)行一下說明:簡(jiǎn)單的說 HTTP 協(xié)議是應(yīng)用層協(xié)議, 通過下層傳輸層的 TCP 進(jìn)行可靠連接, 網(wǎng)絡(luò)層 IP 選路, 鏈路層 Ethernet II,最后在物理上以位(Bit 進(jìn)行傳輸。應(yīng)用層 -HTTP傳輸層 -TCP網(wǎng)絡(luò)層 -IP 鏈路層 -Ethernet II2. HTTP協(xié)議工作方式由于 HTTP 協(xié)議是基于請(qǐng)求/響應(yīng)模式的(相當(dāng)于客戶機(jī)/服務(wù)器。一個(gè)客戶機(jī)與服務(wù)器建立 連接后, 發(fā)送一個(gè)請(qǐng)求給服務(wù)器, 請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL、 協(xié)議版本號(hào), 后邊是 MIME 信息包括請(qǐng)求修飾符、客戶機(jī)信息和可能的內(nèi)容。服務(wù)器接到請(qǐng)求后,給予相 應(yīng)的響應(yīng)信息, 其格式為一個(gè)狀態(tài)行, 包括信息的協(xié)議版本號(hào)、 一個(gè)成功或錯(cuò)誤的代碼, 后 邊是 MIME 信息包括服務(wù)器信息、實(shí)體信息和可能的內(nèi)容。這個(gè)過程就好像我們打電話訂貨一樣, 我們可以打電話給商家, 告訴他我們需要什么規(guī)格的 商品, 然后商家再告訴我們什么商品有貨, 什么商品缺貨。 這些, 我們是通過電話線用電話 聯(lián)系(HTTP 是通過 TCP/IP。HTTP 協(xié)議的內(nèi)部操作過程:基于 HTTP 協(xié)議的客戶/服務(wù)器模式的信息交換過程,它分四個(gè) 過程:建立連接、發(fā)送請(qǐng)求信息、發(fā)送響應(yīng)信息、關(guān)閉連接。這就好像上面的例子,我們電 話訂貨的全過程。其實(shí)簡(jiǎn)單說就是任何服務(wù)器除了包括 HTML 文件以外, 還有一個(gè) HTTP 駐留程序, 用于響應(yīng)用 戶請(qǐng)求。你的瀏覽器是 HTTP 客戶,向服務(wù)器發(fā)送請(qǐng)求,當(dāng)瀏覽器中輸入了一個(gè)開始文件或 點(diǎn)擊了一個(gè)超級(jí)鏈接時(shí), 瀏覽器就向服務(wù)器發(fā)送了 HTTP 請(qǐng)求, 此請(qǐng)求被送往由 IP 地址指定 的 URL。駐留程序接收到請(qǐng)求,在進(jìn)行必要的操作后回送所要求的文件。在這一過程中,在 網(wǎng)絡(luò)上發(fā)送和接收的數(shù)據(jù)已經(jīng)被分成一個(gè)或多個(gè)數(shù)據(jù)包(packet, 每個(gè)數(shù)據(jù)包包括:要傳送 的數(shù)據(jù);控制信息,即告訴網(wǎng)絡(luò)怎樣處理數(shù)據(jù)包。TCP/IP 決定了每個(gè)數(shù)據(jù)包的格式。五、 數(shù)據(jù)包分析我們現(xiàn)在來分析剛剛抓取的數(shù)據(jù)包, 看看 HTTP 協(xié)議怎樣進(jìn)行建立連接, 發(fā)送請(qǐng)求信息, 發(fā) 送響應(yīng)信息,關(guān)閉連接的過程。1. 建立連接第 1.2.3個(gè)數(shù)據(jù)包是 HTTP 協(xié)議使用下層 TCP 協(xié)議通過三次握手原則建立連接的過程, 如圖 2所示, (圖 3 建立連接說明:圖 3中選中三個(gè)數(shù)據(jù)包描述的是 TCP 三次握手的過程。這樣我們可以知道, HTTP 通訊是發(fā)生在 TCP 協(xié)議之上,缺省端口是 TCP 的 80端口,所以 HTTP 是一個(gè)可靠的協(xié)議。至于三次握手原理,看解碼: 上面三個(gè)圖分別為前三個(gè)數(shù)據(jù)包中的 TCP 標(biāo)記信息,反映了 TCP 的三次握手過程:客戶端 向 Web 服務(wù)器發(fā)送一個(gè) SYN 同步連接請(qǐng)求, Web 服務(wù)器收到請(qǐng)求后向客戶端發(fā)送一個(gè)SYN/ACK 數(shù)據(jù)包,同意客戶端的連接請(qǐng)并向客端發(fā)起同步,客戶端收到該數(shù)據(jù)包后再次確 認(rèn),從而成功建立 TCP 連接。 2. 發(fā)送請(qǐng)求信息 接下來我們?cè)賮碛^察第四個(gè)數(shù)據(jù)包, 這個(gè)是主機(jī) 192.168.0.92 發(fā)起的 HTTP 請(qǐng)求包, 如圖 4, (圖 4 發(fā)送請(qǐng)求信息) 圖 4 中,我們從數(shù)據(jù)包解碼中看到 HTTP 協(xié)議發(fā)送請(qǐng)求信息的一些特征。打開一個(gè)連接后, 客戶機(jī)把請(qǐng)求消息送到服務(wù)器的停留端口上,完成提出請(qǐng)求動(dòng)作。 圖 中的 請(qǐng)求報(bào)文 l l l l l l l l l HTTP Command: /方法字段,說明其使用的是 GET 方法 URI: / /URL 字段,發(fā)送請(qǐng)求至保存該網(wǎng)站的服務(wù)器。 HTTP Version: /http 協(xié)議版本字段,用是的 http/1.1 版本 Accept: /指示可被接受的請(qǐng)求回應(yīng)的介質(zhì)類型范圍列表。 Accept-Language: /限制了請(qǐng)求回應(yīng)中首選的語言為簡(jiǎn)體中文,否則使用默認(rèn) 值。 Accept-Encoding: /限制了回應(yīng)中可接受的內(nèi)容編碼值,指示附加內(nèi)容解碼方式 為 gzip,deflate. User-Agent: /定義用戶代理,即發(fā)送請(qǐng)求的瀏覽器類型為 Mozilla/4.0 Host: www.csna.cnrn Connection: Keep-Alivern /定義了目標(biāo)所在的主機(jī) /告訴服務(wù)器使用持久連接 3. 發(fā)送響應(yīng)信息 第 6 個(gè)數(shù)據(jù)包是服務(wù)器的響應(yīng)包信息,從圖 4 可以看出, (圖 5 分析解碼,我們可以知道這些內(nèi)容: 響應(yīng)報(bào)文 服務(wù)器在處理完客戶的請(qǐng)求之后,要向客戶機(jī)發(fā)送響應(yīng)消息。 圖 中的 回應(yīng)報(bào)文 l l l l l l l l l l l HTTP Version: HTTP/1.1 /服務(wù)器用的是 HTTP/1.1 版本 HTTP Status : 200 /請(qǐng)求成功,信息可以讀取,包含在響應(yīng)的報(bào)文中 Date: /指服務(wù)器從文件系統(tǒng)中檢索到該對(duì)象,插入到響應(yīng)報(bào)文,并發(fā)送該響應(yīng) 報(bào)文的時(shí)間 Server: /表明刻報(bào)文是由一個(gè) Apache/2.0.52 的服務(wù)器產(chǎn)生的 X-Powered-By: /表明是使用 PHP(版本)的動(dòng)態(tài)網(wǎng)頁 Set- cookie: / Vary: / Content-Length: /表明實(shí)體的長度 Connection: /告訴客戶機(jī)在報(bào)文發(fā)送完畢后仍然保持連接 Content-Type: /表明實(shí)體中的對(duì)象是 html 文檔 Binary Data: /二進(jìn)制數(shù)據(jù) 說明:在服務(wù)器給的回應(yīng)請(qǐng)求中,我們可以從狀態(tài)碼中看到訪問的相關(guān)信息。 狀態(tài)碼表示響應(yīng)類型,常用的有: l l l l l 保留 表示請(qǐng)求成功地接收 為完成請(qǐng)求客戶需進(jìn)一步細(xì)化請(qǐng)求 客戶錯(cuò)誤 服務(wù)器錯(cuò)誤 在我們抓到的數(shù)據(jù)包中,狀態(tài)碼是 ,表明請(qǐng)求是成功接受請(qǐng)求。 關(guān)閉連接 最后 個(gè)數(shù)據(jù)包()就是通訊的關(guān)閉過程,建立一個(gè)連接需要進(jìn)行三次握手, 而終止一個(gè)連接則需要經(jīng)過 次握手。 這是由于 連接是全雙工的, 每個(gè)方向上都必須單 獨(dú)地進(jìn)行關(guān)閉。 次握手實(shí)際上就是兩個(gè)方向上單獨(dú)關(guān)閉的過程。這里就不詳細(xì)說明了, 六、 小結(jié) 從上面的講解, 我想咱們對(duì) HTTP 協(xié)議也了解了很多了吧, 對(duì)照分析軟件來學(xué)習(xí)是不是覺得 有點(diǎn)不一樣哇,我們?cè)跀?shù)據(jù)包解碼中看到只是資料所說的有點(diǎn)出入。呵呵,資料上說的是不 是要復(fù)雜的多, 這也說明, 在具體實(shí)際情況下是不同的。 在這里, 我們只是說說學(xué)習(xí)的思路, TCP/IP 協(xié)議是非常復(fù)雜的,一個(gè)好的學(xué)習(xí)方法,使的咱們?cè)趯W(xué)習(xí)其他協(xié)議的時(shí)候就能舉一 反三: )希望大家能談?wù)勛约旱膶W(xué)習(xí)方法。大家互相交流撒。 菜青蟲 2006 年 6 月