淺談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解析子樹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章