wireshark從2.0版開始支持ceph協議解析html
下載地址:https://www.wireshark.org/download/網絡
使用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是在這兩個節點之間流動的數據包tcp
注意:tcpdump抓包要從ceph集羣會話開始抓,不然在會話中間抓包,wireshark不識別。函數
一、GUI處理在頁面上全部用戶的顯示包塊對話框,源碼在ui/qt下面源碼分析
二、core主要的「膠水」模塊,把別的模塊整合到一塊兒,源碼在根目錄下ui
三、Epan包分析引擎,用協議書的形式分析包。源碼在epan目錄下spa
四、Wiretap用於讀、寫捕獲的文件,源碼在wiretap目錄下3d
五、Capture捕獲網絡數據的接口模塊,源碼在capture下htm
參考:https://www.wireshark.org/docs/wsdg_html_chunked/ChWorksOverview.html
當Wireshark從文件加載數據包時,每一個數據包都會被解析。 Wireshark嘗試檢測數據包類型,並從數據包中獲取儘量多的信息。在此運行中,只須要包列表窗格中顯示的信息。
當用戶在數據包列表窗格中選擇特定數據包時,將再次解析該數據包。 這一次,Wireshark嘗試獲取每一條信息並將其放入數據包詳細信息窗格中。
每一個解剖器解碼其協議的一部分,而後將解碼交給後續解剖器以得到封裝協議。
參考:https://www.wireshark.org/docs/wsdg_html_chunked/ChapterDissection.html
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解析子樹。