Debug --> wireshark分析pcap包的frame(物理層資料幀)
還是先給出一個例子叭。
第一行給出的是物理層資訊, 物理層為裝置之間的資料通訊提供傳輸媒體及互連裝置,總結來說就是“訊號和介質”。
從圖中可以看出該層所提供的資訊包括兩類:
(1)一類沒有中括號,表示從pcap資料報文本身提取的一些資訊。
(2)另外一類帶有中括號,表示根據報文整體的分析所給出的輔助性資訊,pcap本身並不含有這些欄位資訊。。
1 Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592bits) 1號幀,線路74位元組,實際捕獲592bits 2 Encapsulation type: Ethernet (1) #封裝型別,表示乙太網的鏈路3 Arrival Time: 捕獲日期和時間(中國標準時間) 4 [Time shift for this packet: 0.000000000 seconds] 5 Epoch Time: 絕對時間秒數(和前一種是不同的表達方式) 6 [Time delta from previous captured frame: xx seconds] 此包與前一包時間間隔 7 [Time delta from previous displayed frame: xx seconds] 8 [Time since reference or first frame: xx seconds] 此包與第一個幀的時間間隔9 Frame Number: 1 幀序號 10 Frame Length: 74 bytes (592 bits) 幀長度,資料的長度,是根據協議這種類格式中length所得到的長度,和後面的Capture Length長度是不同的。 11 Capture Length: 74 bytes (592 bits) 在網絡卡上實際捕獲的資料幀長度。通常情況下Frame Length和Capture Length 是相同的,但是如果Capture Length所捕獲的資料有缺失,則Capture Length要比Frame Length要小一些。 12 [Frame is marked: False] 此幀是否做了標記:否13 [Frame is ignored: False] 14 [Protocols in frame: eth:ethertype:ip:tcp] 幀內封裝的協議層次結構 15 [Coloring Rule Name: HTTP] 用不同顏色的染色標記的協議名稱:HTTP 16 [Coloring Rule String: http || tcp.port == 80 || http2] 染色顯示規則字串
上述frame層中這些沒有中括號的資訊都是從pcap報文中獲取,但是又不是協議所提供的,這些資訊不屬於網路傳輸過程中傳輸協議資料或者傳輸內容資料的一部分,屬於的是諸如winpcap 以及libpcap 這種用於抓取網路資料的庫,在抓取資料時候將每一片的報文新增的一些頭部資訊中的內容,因此有必要簡單介紹一些pcap檔案的構成,如下圖所示。
在wireshark的官網給出了pcap檔案的儲存格式。一個總的頭部資訊Global Header,以及每一片報文會有其對應的頭部資訊Packet Header,這些資訊都是在形成pcap報文的過程中寫入的,而Packet Data則表示抓取網路通訊中的實際資料內容。分別解釋一下Global Header以及Packet Header中個欄位的含義。
1 # global header 2 typedef struct pcap_hdr_s { 3 guint32 magic_number; /* magic number */ 4 guint16 version_major; /* major version number */ 5 guint16 version_minor; /* minor version number */ 6 gint32 thiszone; /* GMT to local correction */ 7 guint32 sigfigs; /* accuracy of timestamps */ 8 guint32 snaplen; /* max length of captured packets, in octets */ 9 guint32 network; /* data link type */ 10 } pcap_hdr_t;
1 # packet header 2 typedef struct pcaprec_hdr_s { 3 guint32 ts_sec; /* timestamp seconds */ 4 guint32 ts_usec; /* timestamp microseconds */ 5 guint32 incl_len; /* number of octets of packet saved in file */ 6 guint32 orig_len; /* actual length of packet */ 7 } pcaprec_hdr_t;
很神奇的使用sublime開啟pcap包,就可以看到它的十六進位制格式啦!
1. Global Header中magic_number 為檔案開始表示,一般為0xd4c3b2a1,同時頭部位元組需要交換讀取順序,如上述碼流所示。
2.version_major和version_minor一共4個位元組表示大小版本號,即pcap格式版本,當前版本為2.4。
3.thiszone為4個位元組的區域時間資訊,預設為GMT,其值為0。
4.sigfigs為4個位元組的精確時間戳,通常預設為0。
5.snaplen為4個位元組的包最大長度描述的是允許抓取的每一片報文的最大長度,一般預設 ffff 0000 ,65535個位元組即可以表示通常報文的最大長度,圖這裡面設定為 0400 0000(頭部位元組需要交換讀取順序)表示一個比較大的位元組大小,如果想限制抓取每一片報文的長度,則可以設定。
6.network為4個位元組的鏈路型別,就是反應在frame 層中的Encapsulation type Ethemet(1)其值為1。
1.每一片Packet Header中包括ts_sec和ts_usec共8 個位元組的時間資訊,體現在Frame 中主要是每一片報文的捕獲時間,為 31bc 5f59 23ba 0b00,轉換後的時間為最開始給出的圖片中的arrival time。
2.incl_len為4 個位元組的捕獲長度資訊,以及orig_len為4個位元組的實際長度資訊,均為4a00 0000,轉換為主機位元組序表74個位元組長度。至於incl_len和orig_len的區別,在前面介紹frame層資訊的時候已經闡述。
雖然frame不是網路協議的一部分,但是wireshark能夠像各個協議一樣為frame層提供了顯示過濾器,可以用於篩選報文。
【sublime中後續位元組表示的資訊,可以檢視上一篇!】
更多資訊連結:https://blog.csdn.net/javajiawei/article/details/80187963