http://www.docin.com/p-101479451.html
这是一个登陆请求的抓包:
0x0010
0x0020
14:23:10.184430 88.120.40.59.broad.sz.gd.dynamic.163data.com.cn.20645 > pcs3166.11631: P [tcp sum ok] 150:306(156) ack 26 win 33371 (DF) (ttl 109, id 23149, len 196)
0x0000
0x0010
0x0020
0x0030
0x0040
0x0050
0x0060
0x0070
0x0080
0x0090
0x00a0
0x00b0
0x00c0
那么根据自定义的接口文档来参考:
登陆的消息包头组建格式为:
CLIENT->CSVR的消息的接口格式
Protocal Version 2字节,数字 | Length 4字节,数字 | Type 2字节,数字 | TransactionID 4字节,数字 | Session ID 4字节,数字 | MSG BODY XML格式,长度不定 |
Length:表示整条消息的总长度,包括protocal version, length, type, session id及msg body字段。
Type表示消息类型,其类型和取值为 登录请求:1(Client->Server)
按照以上的协议分析:
MSGBODY前面的共:2+4+2+4+4=16个字节
所以找到从MSGBODY向前找,找到16个字节,就正确了,
下面的就是从<req>向前找,
0001
对比协议可以看出:
0001
nVersion
由于网络字节序与主机字节序的区别,不同CPU的字节序不一样,有些CPU是高字节在前面,有些是低字节在前面。网络上传输的消息码流是网络字节序的,
我们如果分析抓包工具的消息,由于主机是奔腾的CPU,先要将网络序转换为主机序,需要前后左右置换一下。置换后为:
0100
nVersion
转化为10进制分别为:256 、65692、0、1、0
而实际的length的值我们可以数一下: 16+MSGBODY包共(140字节)= 156
而且也看出ntype不对,实际上应该是1。版本也不对。
通过这样一分析,就知道是登陆请求发错了,而且知道了错误的原因。
(一般抓包:我是用root用户直接用命令行抓,没有用相关工具)