协议解析Bug分析

协议解析Bug分析

源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug。

       一、Bug描述

腾讯收购的Foxmail客户端可以作为outlook客户端的替代品与Exchange服务端进行交互完成邮件收发。而我们所要做的就是让邮件经过我们代理的优化处理。

这时候问题来了,Outlook客户端经由我们代理没有任何问题;但是换成Foxmail就会有错误弹窗,错误号:0x000006BE。但是如果不经过代理,Foxmail收发邮件一切正常。

很明显,是代理出了问题。

       二、不知道如何排查?

又是面对不熟悉的6万行以上的代码,又是不熟悉的框架,又是文档混杂,又是项目进度非常赶……

还好是必现的环境,还好还有日志、还有wireshark的分析。

初始的时候由于不知道虚拟机开启了混杂模式,导致wireshark抓的数据包有大量的Retransmit数据包以及很多out
of order(失序)数据包。所以抓住的点是某个包被重传了两次,然后找日志哪个包重传了两次?

由于日志里确实没有找到重传数据包,再来怀疑之前的分析?这才找到了混杂模式导致了误分析。特将混杂模式和普通模式定义列举如下:

        混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。

        三、根本原因

最后思路还是结合日志分析抓包,看到对于RPC的请求数据包(request)的加密数据长度和日志打印不一致,顺着代码去读,发现是Foxmail较outlook多了一个比特标记位置为1(此为根本原因),导致多出了表示回话UUID的16个字节的数据。在数据处理中取长度和取数据段结构体赋值的时候导致偏移出错。

       四、阶段小结

虽然找到偏移出错的根本原因,但是要彻底解决bug还有很长的路要走。代理中有几十处能搜到的和偏移有关的数据项,有些变量不能见名识意,还需要跟读代码逻辑。

深刻体会到协议解析常犯的两个错误:

1)对于协议的解析,马虎不得,偏移一个比特可能剩余的解析会全部出错;

2)协议解析有些字段或者标记位是可选项,比如大多是情况用户不去选择则该字段就没有意义。但是作为程序员的我们要考虑到一旦用户选择的情况,做好分支判定处理。

协议解析必须严格参考协议文档,考虑相当全面,马虎不得。

2014-10-26 pm8:39思于家中床前

作者:铭毅天下

转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/40480235

如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

时间: 2024-10-09 20:09:39

协议解析Bug分析的相关文章

通用轻量级二进制格式协议解析器

在通信协议中,经常碰到使用私有协议的场景,报文内容是肉眼无法直接看明白的二进制格式.由于协议的私有性质,即使大名鼎鼎的 Wireshark,要解析其内容,也无能为力. 面对这种情况,开发人员通常有两个办法:第一,对照报文内容和协议规范进行人工分析(假设内容没有经过加密.压缩):第二,编程实现协议报文的解析(源于程序员的懒惰 ^_^). 很明显,第二条道路是主流.目前比较常见的实现方式是开发对应的 Wireshark 插件,包括 C.Lua 等插件.当然,插件完成后需要运行 Wireshark 才

twemproxyRedis协议解析探索——剖析twemproxy代码正编

这篇文章会对twemproxyRedis协议解析代码部分进行一番简单的分析,同时给出twemproxy目前支持的所有Redis命令.在这篇文章开始前,我想大家去简单地理解一下有限状态机,当然不理解也是没有问题的,有限状态机仅仅能帮助我们更好地理解twemproxyRedis协议解析代码部分. redis 协议 这边我们首先需要简单介绍一下redis协议.参考自https://redis.io/topics/protocol redis协议即RESP 的数据类型有5类,简单字符串.错误.整数.大字

PPTP协议握手流程分析--转载

一  PPTP概述 PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网,可以通过密码验证协议,可扩展认证协议等方法增强安全性.远程用户可以通过ISP.直接连接Internet或者其他网络安全地访问企业网: 它能够将PPP(点到点协议)帧封装成IP数据包,以便能够在基于IP的互联网上进行传输.PPTP使用TCP是实现隧道的创建.维护与终止,并使用GRE(通用路由封装)将PP

视音频数据处理入门:UDP-RTP协议解析

===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理入门:PCM音频采样数据处理 视音频数据处理入门:H.264视频码流解析 视音频数据处理入门:AAC音频码流解析 视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析 ===================================================

2015最新WebQQ3.0协议解析与实现

2015最新WebQQ3.0协议解析与实现(一) 2015最新webqq密码加密分析 2015最新WebQQ3.0协议解析与实现(三) 2015最新WebQQ3.0协议解析与实现(四) webqq协议综合篇,这个不是最新的,但是内容很全

i2c知识总结及协议解析

知识总结部分: 一. 技术性能: 工作速率有100K和400K两种: 支持多机通讯: 支持多主控模块,但同一时刻只允许有一个主控: 由数据线SDA和时钟SCL构成的串行总线: 每个电路和模块都有唯一的地址: 每个器件可以使用独立电源 二. 基本工作原理: 以启动信号START来掌管总线,以停止信号STOP来释放总线: 每次通讯以START开始,以STOP结束: 启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R. /W位为0表示由主控向被控器件写

桌面云的四大协议解析

桌面云的四大协议解析 http://bbs.51cto.com/thread-1067283-1.html 国内VDI市场之乱象分析,第二篇:传输协议篇 http://virtualworld.blog.51cto.com/1412963/1692146/ 华为被评为全球桌面虚拟化市场主流玩家 http://www.csdn.net/article/a/2016-12-09/15842543 报告指出,华为推出的基于HDP(Huawei Desktop Protocol)桌面传输协议的桌面虚拟化

AOSP中的HLS协议解析

[时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, AOSP, 源码分析,HttpLiveSource, LiveSession,PlaylistFetcher] 1. 引言 本文作为HLS综述的后续文章,也是我之前对Nuplayer源码分析中GenericSource源码解析的姊妹篇.当然本文侧重于结合HLS原理来分析NuPlayer中相关实现逻辑.如果你对NuPlayer不是很了解,建议先简单了解下. 本文重点关注的是NuPlayer中的HttpLiveS

详解BLE 空中包格式—兼BLE Link layer协议解析

BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(packet)涉及BLE协议栈link layer,L2CAP,SMP和ATT等各层次,但link layer跟空中包格式关系最紧密,掌握了BLE packet的格式,就很容易理解BLE link layer协议的工作原理,因此文章取名"详解BLE空中包格式-兼BLE link layer协议解析&qu