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解析子树。