由捕獲到的數據包重組html頁面技術

由捕獲到的數據包重組html網頁技術


根據解析協議得到端口號,由端口號判斷對應進程,再根據進程對數據的封裝格式,可以由捕獲的數據包恢復數據(數據重組技術)。下面介紹如何根據捕獲到的http協議TCP數據包恢復html網頁技術。

任何一應用程序要利用網絡進行通信,必須有自己的通信格式,即,發送端發送的數據,接收端要能夠正確解釋;接收端返回數據,發送端也要能解釋返回的數據並作相應處理。瀏覽器也不例外。

HTTP有兩類報文,從客戶到服務器的請求報文和從服務器到客戶的響應報文。

典型的HTTP請求報文如下:

GET              /dirABC/docu1.html       http/1.1          // 請求行

Connection:    close                                          // 此行和以下都是首部行

User-agent:     Mozilla/4.0

Accept:          text/html, image/gif,image/jpeg

Accept-language:    en

                                                                      // 此處有一空行

在請求行中的第一個字段是"方法(method"。這是面向對象技術中使用的專門名詞,也就是對所請求的對象進行的操作,因此這些方法實際上就是一些命令。此處填入的方法是GET,表示請求讀取一個萬維網頁面,這是最常用的一個方法。其它常用的方法還有HEAD(請求讀取的不是整個頁面而只是其首部)和POST(請求接受所附加的實體,如將一個記錄附加到一個數據庫中)。請求行的第二個字段是所要鏈接到的對象的URL。由於在建立TCP連接時已經有了主機名,因此這裏只寫上主機中的文件名(包括路徑)。第三個字段說明是HTTP1.1版本。

以下就是首部行。" Connection: close "表示瀏覽器希望服務器在傳送完所請示的對象後即關閉TCP連接(還有一種可選擇的情況是暫不關閉TCP連接,繼續讀取其它對象)。下一行是餘明瀏覽器的類型。" Mozilla/4.0"Netscape瀏覽器4.0版本。再下面兩行是瀏覽器告訴服務器它準備接收什麼和使用的語言是英文(en)。使用GET時,首部行後面沒有最後的實體主體。

當用戶在網上填寫表單(form)時,要用到POST方法。這時,用戶鍵入的信息要填寫到最後的主體中,和前面的請求行、首部行一起發送給HTTP服務器。

典型的HTTP響應報文如下:

HTTP/1.1 200 OK                                            // 狀態行

Connection:    close                                          // 此行開始的6行都是首部行

Date:       Thu,06 Aug,2003   12:00:15 GMT

Server:    Apache/1.30Unix

Last-Modified: Mon,22 Jun 2003   09:23:24  GMT

Content-Length:     8765                                   // 文件長度字節數

Content-Type:        text/html

                                                                      // 此處一個空行

……                                                               // 數據開始

狀態行中的200是狀態碼,OK是短語,表示一切正常。

狀態碼共有41種,常用的有下述幾種:

301Moved Premanently,網站已轉移,新的URL指明在響應報文首部Location:

的後面);

              400Bad Request,服務器無法理解請求報文);

              401Not Found,服務器上沒有所請求的對象);

              505HTTP Version Not Supported,服務器不支持請求的HTTP的協議版本)。

 

超文本標記語言HTMLHyperText Markup Language)是一種製作萬維網頁面的標準語言。HTML使用HTML標籤,如:網頁文檔應該寫在<html></html>標籤之間,<head></head>定義文檔的首部,<br>爲強制換行。HTTP(當Content-Typetext/html時)響應報文內容的數據部分就是HTML文檔。如圖8

8

在瀏覽網頁時,瀏覽器首先向服務器發出HTTP請求報文,服務器作出響應並返回HTTP響應報文。一般一個頁面大小都在數10K以上,而IP包最大爲1500B,再加上IP首部,TCP首部,真正用於傳輸頁面內容的部分最大隻有1460B。很明顯,要用很多報文段才能傳輸完一個頁面。數據傳送時被TCP分割成認爲最適合發送的數據塊,也就是說數據在發送方被分成一塊一塊的發送,接受端收到這些數據後再將它們組合在一起TCP在三次握手建立連接時確定了開始傳輸第一塊數據的序列號和確認號,又因爲TCP連接完全是雙向的,即雙方的數據流可同時傳輸,在傳輸過程中雙方數據是獨立的,因此在傳輸某一頁面時,確認號不會改變,序列號爲上一TCP數據包的序列號加和數據長度。

綜上所述,要恢復某一頁面,可根據確認號判定哪些TCP包是用來傳輸該頁面的。先選中任一傳輸頁面的TCP包,得到服務端傳輸該頁面的ACK,查找最近接收的包中有哪些TCP包的ACK與此ACK相同,如果相同,表示這些TCP包都是用來傳輸同一頁面的。按包的SEQ(序號)順序,解析這些包,把包中傳輸數據部分保存下來,這樣就得恢復了頁面內容。但在此過程中,要注意:是否捕獲到了所有的數據包,數據包在傳輸過程中本身有沒有錯誤等。

具體實現:

1.    如何得到要恢復文件的文件名和文件類型。

當你訪問一網頁時,很少出現全文本格式的HTML,大部分網站頁面包含很多的圖像文件:jpeggif等,flash動畫:swf,還有的網站有背景音樂或其它類型文件,保存時不可能以一種文件格式來保存,命名時也是不能以同樣一個名稱來命名,這就需要我們在保存文件之前先得到文件名和文件類型。

在服務端向客戶端發送數據之前,客戶端先要向服務端請求傳送什麼文件,這在HTTP請求報文中的請求行中指明,如:GET       /dirABC/docu1.html  http/1.1,這裏的docu1.html就是請求要傳送的文件,docu1是文件名,而.html就是文件類型擴展名,所以要找到傳送文件的文件名和文件類型,只要找到請求傳送該文件的客戶端請求報文。客戶端請求報文的ACK是服務端傳送文件時的第一個包的SEQ。當要恢復(重組)一個文件時,根據選擇的數據包很容易得到傳送該文件時所用的ACK,搜索最近接收到的所有包,並找到所有ACK相同的包,這些包中,第一個(也是發送該文件的第一個包)的SEQ就是請求報文所有包的ACK,由此可以得到請求報文,分析提取文件名和文件類型。

2.    如何將得到的包重組。

把所有屬於傳輸要恢復的文件的包都找到後,重組該文件是一件簡單的事情。在第一個包中除了含有文件內容外,還有更重要的是狀態行和首部行信息(見上文HTTP響應報文)。由首部行的信息可以得到繼續恢復後面的包是否有意義,比如:在首部行中有一句401  Not Found,意味着後面即使有相同ACK的包,也是一些沒有意思的包;從首部行也可以分析出文件的類型,可以提示用戶用什麼程序打開恢復後的文件。

將第一個包的狀態行和首部行信息去除後,剩下的就是要恢復文件的內容了(注:有些傳輸文件的首部行很長而包又很短,首部行信息有部分出現在第二個包中),將文件內容保存,再把下一個包的內容加在已保存內容的尾部(對於HTML或其它文本文件來說,多一個空格或少一個空格都無所謂,但對於圖像動畫文件,常常因爲多一個空格或少一個空格顯示出亂碼),直到所有包都保存完,這時保存文件,便算是恢復結束。

3.    重組整個html頁面。

當打開一個html頁面時,頁面中的圖片、動畫都以HTML標籤:src="http://www.swau.edu.cn/image/picture.gif" 引用其它地址的圖片、動畫,有些頁面還使用了框架,有src="login.html"等標籤。瀏覽器向服務器發出請求報文其實只是請求當前頁面,頁面內的其它每一個以src 進入的內容,必須單獨發送請求報文,這也是爲什麼我們在訪問某些網頁時發現在圖片或其它鏈接打不開或失效但頁面其它內容還正常顯示的原因(因爲:如果頁面的所有內容都是由一個請求報文發出,那任一內容出錯就表示整個服務器應答報文錯誤)。

選擇要重組的html頁面,根據頁面內的HTML標籤找出所有src 內容的文件名和文件類型擴展名,枚舉當前收到的所有請求報文是否爲src內容的請求報文,如果是,則把該請求報文的服務器應答報文內容重組,重組後可以將所有src放在同一目錄下,再把源html頁面的所有src標籤指向本地重組的內容文件,整個html頁面重組完成。

發佈了13 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章