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

猜你喜欢

转载自my.oschina.net/u/2326998/blog/2870310
今日推荐