cap資料報檔案解析

2021-08-26 17:53:59 字數 1403 閱讀 3757

windows下的wireshark和linux下的tcpdump所抓的包為同樣的cap檔案的格式,sniffer軟體所抓的包副檔名也是.cap,但格式卻不太一樣。本文主要說明ethereal和tcpdump抓包產生的.cap檔案的格式。

其實,要獲得pcap檔案的格式,除了直接開啟.cap檔案來分析外,可以看winpcap包或linux下/usr/include下的pcap.h標頭檔案。pcap.h檔案中不但提供了cap檔案解析的各種結構體,還提供了解析函式。

ok,先使用ue或winhex開啟.cap檔案,開始分析其內容:

(1)cap檔案頭

前面24個位元組是.cap檔案的檔案頭。

頭資訊對應的結構體為:

struct pcap_file_header ;

cap檔案中的linktype很重要,不同的網路環境下抓包,資料幀的幀頭是不一樣的。比如,在區域網內抓包,linktype為1 ( dlt_en10mb, ethernet (10mb) ),乙太網的幀頭就是兩個網絡卡實體地址;如果直接用adsl撥號上線,則linktype為9 ( dlt_ppp, point-to-point protocol),資料幀頭為ppp協議。

關於linktype支援的型別,可以參考pcap-bpf.h中定義的以dlt_開頭的巨集。

(2)每個幀的頭資訊

頭資訊後是順序的每個資料報的資訊,其中前16位元組是抓包時間、捕獲的包長度、真實的資料報長度,然後才是具體的資料幀的內容。

上圖是單個資料報的cap檔案,資料報長度是62位元組(3e0x)。

以上乙個資料段的內容。資料段的頭對應的結構體為:

struct pcap_pkthdr ;

ts為抓包的時間;

caplen和len我發現一般都是一樣的。(什麼情況下會不一樣還沒搞懂)

若是多個幀的cap檔案,每個幀之前都會有16位元組的幀頭資訊,之後才是具體的捕獲到的資料幀內容,需要根據每個幀的長度來將不同的幀分開。

也就是說,若是單個幀的cap檔案,前40位元組是cap檔案提供的資訊,之後才是幀內容。

(3)幀內容

之後就是包的資訊了。例子中的包資訊是區域網中抓的,所以是乙太網幀頭,結構體如下:

struct ethernetpacket

;packettype=0x0008是ip包,packettype=0x0608是arp包。

之後的具體資料報資訊根據協議進行解析即可

TCP IP資料報文長度

tcp報文是tcp層傳輸的資料單元,也叫報文段。1 埠號 用來標識同一臺計算機的不同的應用程序。1 源埠 源埠和ip位址的作用是標識報文的返回位址。2 目的埠 埠指明接收方計算機上的應用程式介面。tcp報頭中的源埠號和目的埠號同ip資料報中的源ip與目的ip唯一確定一條tcp連線。2 序號和確認號 ...

資料報解析

從專業的角度來說,網路協議 osi就是乙個開放的通訊系統互聯參考模型,也是乙個定義的很好的協議規範。osi模型有7層結構,每層都可以有幾個子層。osi的7層從下到上分別是7 應用層 6 表示層 5 會話層 4 傳輸層 3 網路層 2 資料鏈路層 1 物理層。物理層 是參考模型的最低層。該層是網路通訊...

資料報格式 USB資料報解析

由域構成的包有四種型別,分別是令牌包 資料報 握手包和特殊包,前面三種是重要的包,不同包的域結構不同,介紹如下 1 令牌包 分為輸入包 輸出包 設定包和幀起始包 注意這裡的輸入包是用於設定輸入命令的,輸出包是用來設定輸出命令的,而不是放資料的 其中輸入包 輸出包和設定包的格式都是一樣的 sync p...