赞
踩
随手笔记,大概只有我能看懂。
记录通过Wireshark抓包研究WebSocket协议的片段,客户端发送消息到服务器。
该图记录截取的是建立websocket连接后,客户端向服务器发送的第一条消息。
该websocket消息帧(报文)(frame)一共76个字节。
通过下方区域可以观察到76个字节的16进制数据。
Fin:true,说明是消息的终结帧,占有1bit;
Opcode:1,说明是消息的起始帧,占据了4bit;
fin是ture & opcode非0,说明这是一个未分帧消息(哈哈,因为我只发了16个字符。。。)
Mask:true,占有1bit,说明该消息帧进行了混淆,或者说是屏蔽,或者说是掩码。浏览器发往服务器的Websocket都要进行掩码,这是Websocket协议(RFC6455)规定的,主要是为了安全策略,防止HTTP代理服务器被攻击或缓存中毒。等我有时间了,写篇文章详细描述,目前还是了解的比较肤浅;
Masking-key:占有4个字节,是混淆websocket消息帧载荷的掩码,浏览器通过该掩码对消息载荷进行异或(EOR)算法操作,得到混淆后的消息,服务器收到消息后,再通过该掩码进行异或操作,解码得到真实的消息;当Mask为true时,一定有此掩码;这就是websocket的屏蔽技术,英文描述为:masking。
上图分析masking-key,观察发现,其占据32位,4个字节,4个字符。抓包展示的是16进制,可以查阅ASCII码对照。
Payload length:消息载荷长度,占据7bit,本消息帧是16个字节。
上图,Masked payload,混淆后的消息载荷,观察发现正好是16 bytes,用16进制表示,对应的消息体也是乱七八糟的字符,用于迷惑Http代理服务器,让它不要缓存,不要尝试解码转发,防止恶意攻击。
上图,Payload,自然是原始消息,我发送的是:hello websocket!,共16 bytes。
展开分析IP协议头,共20个字节。
展开分析TCP协议头,共占据20bytes.
此致 & 晚安!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。