协议解析Bug分析

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: 源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug。

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


      一、Bug描述


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


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


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


      二、不知道如何排查?


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

image.png

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


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


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


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


       三、根本原因


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


      四、阶段小结


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


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


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


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


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


相关文章
|
22天前
|
算法
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
103 1
|
4天前
|
Linux 数据处理 开发者
深入解析Linux中的paste命令:数据处理与分析的得力助手
`paste`命令在Linux中是数据处理的利器,它按列拼接多个文件内容,支持自定义分隔符和从标准输入读取。例如,合并`file1.txt`和`file2.txt`,使用`paste file1.txt file2.txt`,默认以制表符分隔;若要使用逗号分隔,可运行`paste -d ',' file1.txt file2.txt`。当文件行数不同时,较短文件后会填充空白行。结合管道符与其他命令使用,如`cat file1.txt | paste -s`,可按行合并内容。注意文件大小可能影响性能。
|
30天前
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
DNS协议 是什么?说说DNS 完整的查询过程? _
|
25天前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
26天前
|
存储 安全 网络协议
邮件协议揭秘:SMTP与IMAP的双重功能解析
SMTP和IMAP是电子邮件系统的核心协议,SMTP负责邮件发送,通过SSL/TLS保证安全,而IMAP则处理邮件接收和管理,支持服务器存储及状态同步。这两种协议相辅相成,为现代邮件系统提供了坚实基础。它们广泛应用于各种邮件客户端,确保了兼容性、功能丰富性和安全性,满足用户对电子邮件的多样化需求。
39 3
|
6天前
|
数据采集 安全 数据安全/隐私保护
IP代理的协议与主要应用场景解析
**IP代理概述:** HTTP、HTTPS和SOCKS5代理协议用于隐藏真实IP,提供隐私保护、访问受限内容、数据采集、社交媒体营销和网络测试。HTTPS加密增强安全性,SOCKS5则更通用灵活。代理广泛应用于多场景,但需合法安全使用。
|
1月前
|
域名解析 编解码 负载均衡
【域名解析DNS专栏】域名解析中的EDNS扩展:提升DNS协议灵活性
【5月更文挑战第27天】EDNS(Extension Mechanisms for DNS)是为了解决传统DNS协议在复杂网络环境下的灵活性和扩展性问题而诞生的技术。它允许在DNS请求和响应中添加额外选项,提高查询效率,支持更大数据范围,增强安全性,并实现负载均衡和故障转移。通过在DNS消息中包含EDNS部分,客户端和服务器能交换更多信息,实现更复杂的逻辑。EDNS的使用示例代码展示了如何在Python中创建和处理EDNS选项。随着技术进步,EDNS将在域名解析领域扮演更重要角色。
|
1月前
|
监控 安全 网络协议
|
15天前
|
安全 Java 数据安全/隐私保护
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(二)
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(二)
18 0
|
15天前
|
JSON 安全 Java
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(一)
Java基础4-一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!(一)
28 0

推荐镜像

更多