百度贴吧安卓客户端网络通信行为分析
本文由CSDN-蚍蜉撼青松【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!
写在前面:
本文其实是作者我的一门研究生课程作业,为了使本文不至于因太过冗长而显得枯燥,本文特意略去了原文中一些比较重复乏味的内容,尽量呈现的是一些可能更令您感兴趣的贴吧功能。若是您确实需要阅读更完整的版本,可以前往CSDN下载频道 【http://download.csdn.net/detail/ping_fani07/6028411】下载本文的PDF完整版。
出于个人隐私保护的考量,本文所举的例子中,改动了一些关键信息,请勿对号入座~
Thank you for your reading !
一、实验环境与结果概述
1.1 实验环境
手机型号:HUAWEI C8812
操作系统:Android 4.0.3
应用版本:百度贴吧4.0.0
分析工具:Tcpdump for Android,WireShark 1.10.0rc2
【抓包的具体方法详参我的下一篇博文:《基于tcpdump的Android智能移动终端数据包捕获完整解决方案》】
1.2 结果概述
百度贴吧客户端的所有重要通信行为都使用了HTTP协议。
贴吧客户端发出的HTTP请求一般采用POST方法,表1-1对比展示了不同操作对应的请求报文。其中application/x-www-form-urlencoded格式将请求正文分成多个元素,各元素本身由名和值(可能使用URL编码)组成,各元素之间使用&符号隔开;multipart/form-data格式被用在使用POST方法发送HTML表单时,请求正文被分隔符(由boundary定义)分割成很多子段,每个子段可以自定义子段名称和值,从而实现在单个消息实体中封装多个主体的功能。
表1-1 不同操作对应的POST请求对比
服务器返回的响应有着类似的头部,如图1-1所示。
图1-1 贴吧服务器返回的响应头部
状态行一般为HTTP/1.1 200 OK,正文的类型一般纯文本文件,正文本身一般经过gzip编码压缩,且在传输过程中一般使用了chunked编码进行分块传输。后文在说到响应正文时,一般是指重组解压后的正文,后文中不再特别指出这一点。一个简单的正文示例如图1-2所示。
图1-2 一个最简单的响应正文示例
如上图,还原出来的完整响应正文普遍使用了JSON格式。该数据格式的特征是整个正文都处于一对大括号{ }内。正文一般分成多个段,每个段由名和值组成,段与段之间用逗号隔开。有些段的值会由多个子段构成,一个段的所有子段也会用一对方括号[ ]或是大括号{ }括起来。大部分情况下,有四个一级段在正文是都存在的,包括:error_code(操作成功时值为0,操作失败时为对应错误代码)、time、ctime,以及logid。
【我们约定,与error_code处在同一层次的称为一级段,一级段的子段为二级段,以此类推。】
下面就各行为做具体分析。
二、登录行为分析
2.1 登录请求
登录时,贴吧客户端使用一个POST请求来提交认证信息。该登录请求的请求行使用