协议解析Bug分析

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

       一、Bug描写叙述

腾讯收购的Foxmailclient能够作为outlookclient的替代品与Exchange服务端进行交互完毕邮件收发。而我们所要做的就是让邮件经过我们代理的优化处理。

这时候问题来了,Outlookclient经由我们代理没有不论什么问题;可是换成Foxmail就会有错误弹窗。错误号:0x000006BE。

可是假设不经过代理,Foxmail收发邮件一切正常。

非常明显,是代理出了问题。

       二、不知道怎样排查?

万行以上的代码,又是不熟悉的框架,又是文档混杂。又是项目进度很赶……

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGFveWFuZzM2MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

因为日志里确实没有找到重传数据包,再来怀疑之前的分析?这才找到了混杂模式导致了误分析。

特将混杂模式和普通模式定义列举例如以下:

        混杂模式就是接收全部经过网卡的数据包,包含不是发给本机的包。即不验证MAC地址。

普通模式下网卡仅仅接收发给本机的包(包含广播包)传递给上层程序,其他的包一律丢弃。

一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。

        三、根本原因

个字节的数据。在数据处理中取长度和取数据段结构体赋值的时候导致偏移出错。

       四、阶段小结

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

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

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

2)协议解析有些字段或者标记位是可选项,比方大多是情况用户不去选择则该字段就没有意义。

可是作为程序猿的我们要考虑到一旦用户选择的情况,做好分支判定处理。

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

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

作者:铭毅天下

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

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

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

  1. 关于bug分析与异常处理的一些思考

    前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...

  2. PPTP协议握手流程分析

    一  PPTP概述 PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网,可 ...

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

    这篇文章会对twemproxyRedis协议解析代码部分进行一番简单的分析,同时给出twemproxy目前支持的所有Redis命令.在这篇文章开始前,我想大家去简单地理解一下有限状态机,当然不理解也是 ...

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

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  5. AOSP中的HLS协议解析

    [时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, AOSP, 源码分析,HttpLiveSource, LiveSession,PlaylistFetcher] ...

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

    一  PPTP概述   PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网 ...

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

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

  8. wireshark 1.10.0 编译 及 协议解析部分的一些变化

    wireshark不久前升级到1.10.0稳定版,这个版本正如其版本号一样,相比1.8.x有较大变化. 我们先说说在windows下编译的问题,1.8.4/1.8.6版本的编译见我的文章:http:/ ...

  9. http协议请求流程分析

    http协议请求流程分析 用户输入URL(地址链接)(http://www.baidu.com:80/tools.html)客户端获取到端口及主机名后,客户端利用DNS解析域名,首先客户端的浏览器会先 ...

随机推荐

  1. JAVA基础——设计模式之单列模式

    一:单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 单例设计模式的特点: 单例类只能 ...

  2. RabbitMQ之六种队列模式

    先学习一下RabbitMQ中的六种队列,只学习前五种,具体的官方文档地址是:http://next.rabbitmq.com/getstarted.html 导入maven依赖: <depend ...

  3. urlEncoder

    拷贝自php的源码,url编码 //url decode //str:输入,输出 //len:str输入字符串大小 //返回值:str解码后字符串大小 int php_url_decode(char ...

  4. [Python3网络爬虫开发实战] 1.5.3-redis-py的安装

    对于Redis来说,我们要使用redis-py库来与其交互,这里就来介绍一下它的安装方法. 1. 相关链接 GitHub:https://github.com/andymccurdy/redis-py ...

  5. 三菱PLC FB库函数调用方法 (Gx Work2版本)

    本文以 GxWorks2 软件为例 1.新建使用标签项目的工程文件 2.从其它库所在工程项目中导入库 3.选择库文件及FB功能块 4.插入FB功能块调用

  6. Phong 光照模型(镜面反射)

    Phong 光照模型 镜面反射(高光),是光线经过物体表面,反射到视野中,当反射光线与人的眼睛看得方向平行时,强度最大,高光效果最明显,夹角为90度时,强度最小. specular = I*R*V: ...

  7. [COJ0970]WZJ的数据结构(负三十)

    [COJ0970]WZJ的数据结构(负三十) 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计一个数据结构,回答M次操作. 1 x v:对于树上的每一个节点y,如果将x.y在树上的距离记为 ...

  8. c/c++ 位域的概念

    位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一种数 ...

  9. boot简介

    目录 1:bootloader介绍2:如何启动一个机器3:工具 Bootloader介绍 MTK的bootloader 主要分为Pre-loader, LK. Pre-loader: 初始化PLL,U ...

  10. 网络编程基础:网络基础之网络协议、socket模块

    操作系统(简称OS)基础: 应用软件不能直接操作硬件,能直接操作硬件的只有操作系统:所以,应用软件可以通过操作系统来间接操作硬件 网络基础之网络协议: 网络通讯原理: 连接两台计算机之间的Intern ...