协议解析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. CentOS7-Git安装以及使用

    2018-09-14 Git安装 在bash终端中输入命令sudo yum install git回车. (出乎意料的顺利) 在随后出现的交互式对话中输入y即可. 随后,当任务执行完后,在bash中键 ...

  2. [转]TOpenDialog

    转自:http://www.cnblogs.com/zhangzhifeng/archive/2011/08/04/2127395.html 1.TOpenDialog组件的典型用法“打开”对话框是用 ...

  3. laravel学习笔记3--高级

    一.artisan 1.基本使用: 1.1.查看基本命令: php artisan 1.2.查看具体命名的使用: php artisan help migrate 1.3.创建控制器: php art ...

  4. 用ffmpeg切割音频文件

    ffmpeg -i audio.wav -f segment -segment_time -c copy audio%02d.wav "-segment_time 60" 表示每6 ...

  5. shell脚本语言基本命令

    shell脚本语言基本命令脚本:可运行,不需要编译 #vi 1.sh[编写:i(顶格)或o(换一行)]#! /bin/bash##this is a test shell script##Writte ...

  6. [bzoj2822][AHOI2012]树屋阶梯 (卡特兰数+分解质因数+高精度)

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...

  7. Leetcode 153.寻找旋转数组中的最小值

    寻找旋转数组中的最小值 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. ...

  8. CSU 1554 SG Value (集合类的学习)

    题目大意: 2种操作 1 a:往集合中添加一个元素a 2: 询问这个集合中的元素任意组合相加所不能得到的最小数的值 这道题总是不断地去找当前所能处的最小值能否被当前的最小值加上其前部的一堆可抵达数到达 ...

  9. 上传图片+生成缩略图 ashx代码

    html页面 <form action="Handlers/UploadImageHandler.ashx" method="post" enctype= ...

  10. 【BZOJ4591】超能粒子炮·改(Lucas定理,组合计数)

    题意: 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...