WireShark抓包的pcap文件格式分析

在拆包的過程中,我們必須要對WireShark截獲的數據包的格式(即.pcap後綴的文件)有很清楚的瞭解,所以就把今天所學記錄下來,以饗後來者。

一、結構體說明

pcap.h裏定義了文件頭的格式
struct pcap_file_header {
        bpf_u_int32 magic;
        u_short version_major;
        u_short version_minor;
        bpf_int32 thiszone;    
        bpf_u_int32 sigfigs;   
        bpf_u_int32 snaplen;   
        bpf_u_int32 linktype;  
};
看一下各字段的含義:
 magic:   4字節 pcap文件標識 目前爲“d4 c3 b2 a1”
 major:   2字節主版本號     #define PCAP_VERSION_MAJOR 2
 minor:   2字節次版本號     #define PCAP_VERSION_MINOR 4
 thiszone:4字節時區修正     並未使用,目前全爲0
 sigfigs: 4字節精確時間戳   並未使用,目前全爲0
 snaplen: 4字節抓包最大長度如果要抓全,設爲0x0000ffff(65535), tcpdump -s 0就是設置這個參數,缺省爲68字節
 linktype:4字節鏈路類型    一般都是1:ethernet
  
數據報頭的格式
struct pcap_pkthdr {
        struct timeval ts;     
        bpf_u_int32 caplen;    
        bpf_u_int32 len;       
};
struct timeval {
        long            tv_sec;        
        suseconds_t     tv_usec;       
};
 ts:    8字節 抓包時間 4字節表示秒數,4字節表示微秒數
 caplen:4字節 保存下來的包長度(最多是snaplen,比如68字節)
 len:   4字節數據報的真實長度,如果文件中保存的不是完整數據包,可能比caplen大。
二、結構圖
圖1詳細的描述了我們截獲數據包的大致結構:

圖1 pcap文件整體結構

Pcap文件頭24B各字段說明:

Magic:4B:0×1A 2B 3C 4D:用來識別文件自己和字節順序。0xa1b2c3d4用來表示按照原來的順序讀取,0xd4c3b2a1表示下面的字節都要交換順序讀取。一般,我們使用0xa1b2c3d4
Major:2B,0×02 00:當前文件主要的版本號
Minor:2B,0×04 00當前文件次要的版本號
ThisZone:4B 時區。GMT和本地時間的相差,用秒來表示。如果本地的時區是GMT,那麼這個值就設置爲0.這個值一般也設置爲0 SigFigs:4B時間戳的精度;全零
SnapLen:4B最大的存儲長度(該值設置所抓獲的數據包的最大長度,如果所有數據包都要抓獲,將該值設置爲65535; 例如:想獲取數據包的前64字節,可將該值設置爲64)
LinkType:4B鏈路類型
常用類型:
0           BSD loopback devices, except for later OpenBSD
1            Ethernet, and Linux loopback devices
6            802.5 Token Ring
7            ARCnet
8            SLIP
9            PPP
10           FDDI
100         LLC/SNAP-encapsulated ATM
101         “raw IP”, with no link
102         BSD/OS SLIP
103         BSD/OS PPP
104         Cisco HDLC
105         802.11
108         later OpenBSD loopback devices (with the AF_value in network byte order)
113         special Linux “cooked” capture
114         LocalTalk
三、詳細結構
直接來圖吧,同樣的事情用圖總會直接簡明,而且易懂。見圖二。

圖2 字段的詳細結構
四、舉例

以下(見圖3)是我截獲的數據包,以.pcap後綴保存的,用UE直接打開,可以詳細看到它的內部結構和上面吻合。


圖3  pcap文件部分截圖

注:藍色選中的部分即爲24字節的數據包包頭

我截獲的的以太網幀的第一幀如圖4所示:

圖4 第一幀的內容

對比圖3和數據報頭16字節格式,你會很容易知道Frame 1的92bytes是5C 00 00 00計算出來的。到此爲止,我想各位應該很清楚的瞭解Frame 1在什麼位置,以及.pcap文件的格式了吧。

如有不懂,請留言,希望我們都能多交流,共同進步,體驗計算機之美。

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