wireshark抓包分析rtmp协议时,总是有Unknown(0x0)这样的包出现。
搜索了一下这类问题多数是说要在抓包开始后建立连接,或者是rtmp流有问题。
但我抓取的rtmp连接建立是在抓包开始之后,应该不存在会出现解包失败的问题,且这个rtmp连接数据包应该也没有问题,因为播放器播放一切正常。这个问题困扰了我一阵,最后决定到源码中一探究竟。
找到源码 wireshark/epan/dissectors/packet-rtmpt.c
, 首先搜了一下unknown
部分代码,只是一些解析报错,并没有明显的出错原因。
查看解析rtmp部分的代码,发现在解析rtmp messagelen
时,就是下面代码中的body_len
, 有个最大值rtmpt_max_packet_size
限制.
|
|
查看这个值定义,初始化为32768.
|
|
这个值的设置在下面这个函数中,是wireshark设置偏好的选项。
|
|
这样一看,也就恍然大悟了,wireshark中默认设置了rtmp messagelen
最大值为32768,只要message
长度超过这个值,就会造成解析出错。
找到wireshark设置preference的地方修改一下这个值
改完之后再次解析同一个rtmp包,结果一切正常了