1. 程式人生 > >淺談wireshark解析ceph網路通訊

淺談wireshark解析ceph網路通訊

一、安裝wireshark

wireshark從2.0版開始支援ceph協議解析

下載地址:https://www.wireshark.org/download/

二、ceph網路抓包

使用tcpdump在ceph叢集上抓包,e.g.:tcpdump -i ens33 -s 0 -w 3ceph.pcap host 172.16.134.95 and host 172.16.134.96 ,

ens33是網路介面名字,3ceph.pcap是儲存的抓包的檔名字,host 172.16.134.95 and host 172.16.134.96是在這兩個節點之間流動的資料包

注意:tcpdump抓包要從ceph叢集會話開始抓,否則在會話中間抓包,wireshark不識別。

三、wireshark架構

 

1、GUI處理在頁面上所有使用者的顯示包塊對話方塊,原始碼在ui/qt下面

2、core主要的“膠水”模組,把別的模組整合到一起,原始碼在根目錄下

3、Epan包分析引擎,用協議書的形式分析包。原始碼在epan目錄下

4、Wiretap用於讀、寫捕獲的檔案,原始碼在wiretap目錄下

5、Capture捕獲網路資料的介面模組,原始碼在capture下

參考:https://www.wireshark.org/docs/wsdg_html_chunked/ChWorksOverview.html

四、wireshark 解析包流程

當Wireshark從檔案載入資料包時,每個資料包都會被解析。 Wireshark嘗試檢測資料包型別,並從資料包中獲取儘可能多的資訊。在此執行中,只需要包列表窗格中顯示的資訊。

當用戶在資料包列表窗格中選擇特定資料包時,將再次解析該資料包。 這一次,Wireshark嘗試獲取每一條資訊並將其放入資料包詳細資訊窗格中。

每個解剖器解碼其協議的一部分,然後將解碼交給後續解剖器以獲得封裝協議。

參考:https://www.wireshark.org/docs/wsdg_html_chunked/ChapterDissection.html

五、wireshark dissector原始碼分析

wireshark根目錄下epan/dissectors/packet-ceph.c是分析ceph網路協議的原始碼

10514行,註冊解析器函式,

10516行,建立ceph_handle,如果有相應的包呼叫dissec_ceph_old函式解析.

10518行,在啟發式解析器中加添dissect_ceph_heur,dissect_ceph_heur判斷是不是ceph的網路包。wireshark分為普通字串表,整數表和啟發式解析表,

啟發式解析器的特點是:一旦特定“連線”的資料包被識別為屬於對於特定的協議,Wireshark應該始終直接呼叫該解析器解析此協議。

7091行,判斷是不是ceph網路協議,其中C_BANNER定義在830行,C_BANNER_SIZE_MIN定義在833行

可見wireshark根據網路包中的ceph v標誌,判斷是否為ceph網路協議。

7099行,如果判斷是ceph協議,呼叫ceph_handle處理。在10516行中建立了ceph_handle。

7081行,呼叫dissect_ceph函式,解析網路包

07019行,在網路包列表protocol欄位中,設定Ceph欄位

當在一個網路包列表中點選一個網路包時,下方的網路包詳細資訊中,以樹形詳細列出網路包的詳細資訊。

用proto_item_add_subtree註冊下層的協議

c_dissect_xxx解析子樹。