Wireshark解析协议不匹配

Wireshark解析协议不匹配


1、问题

现有TLS/SSL over TCP的客户端、服务端相互通信,其中,服务端监听TCP端口6000。 使用tcpdump抓包6000端口,生成pcap文件6000.pcap: 使用Wireshark打开6000.pcap,显示如下: 期待Wireshark解析的是TLS协议,但实际并非如此,而是X11协议。

为什么呢?


2、原因

首先,tcpdump抓包,生成pcap是按照条件进行过滤,抓二进制数据流存储为pcap文件。

二进制数据流本身就是一串0或1,其是否有意义,取决于“你”/Wireshark怎么认为、怎么理解。

实际上,Wireshark对一个pcap包中的数据,会尝试进行解析、呈现。

例如,Wireshark对6000.pcap解析,得知TCP通信端口一侧是6000,则根据默认的预设规则,6000对应X11协议,因此Wireshark尝试使用X11协议解码规则来解析、呈现抓包内容。

面对一串不知名文字,你(Wireshark)只能尝试使用英语/或法语/或汉语来尝试解读它。

因此我们得到非预期的X11协议错误解析结果:

你用“法语”的语法规则去解析“汉语”文章语句,牛头不对马嘴,信息异常。

3、解决

左键选中解析异常的包,右键选择“Decode AS…”: 然后将规则中的“当前”进行修改: 将(none)修改为“TLS”:(你的真正的、实际的通信协议) 点击“OK”或者“Save”: 这个时候,Wireshark就会按照你设定的协议,对pcap进行解析: 例如,我设置59739的TCP端口按照TLS协议解析,可得到上图结果。

当然,更合理的是,对TCP端口是6000的包按照TLS协议解析。

另外,也可以通过菜单栏的“分析”、“解码为…”打开上述界面: 又或者按照快捷键Ctrl+Shift+U快速打开。


4、参考

经验分享 程序员 微信小程序 职场和发展