還是先給出一個例子叭。
第一行給出的是物理層信息, 物理層為設備之間的數據通信提供傳輸媒體及互連設備,總結來說就是 “ 信號和介質 ”。
從圖中可以看出該層所提供的信息包括兩類:
(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