4、微信Airkiss Airkiss顾名思义是飞吻的意思,即手机发送的SSID和密码经过路由转发出去,被目前wifi装备所检测并截获到。无线网络协议1般场景都规定station只能和AP通讯,而不能station和station通讯(这类场景叫做AD-Hoc点对点)。接下来我们分析SSID和pwd怎样利用Length进行编码的进程。 1. 物理层 发送4个字节的前导码序列,{1,2,3,4}。即发送4个数据帧,帧长度分别是1,2,3,4.其要解决两个问题: 1)空中充满无线信号,通过前导码来辨认出符合airkiss协议的数据包的开始。 2)数据包的数据是经过加密的,发送方的数据帧的有效数据的长度是1,经过编码后的长度会发送变化。假定加密后的长度为N,那接收方接收到的数据长度是N。以后所有的数据帧接收的长度是M时,那发送方真实的数据长度是M-N+1。 Airkiss规定数据的长度使用9个bit进行编码。 2.数据链路层
数据链路层的包括控制字段和数据字段。 1)Magic为4个数据帧,两个帧的两个9bit记录将要发送的数据(PWD+Ramdon+SSID)的长度;两个帧的两个9bit记录SSID的CRC校验值。路由器的SSID是会被路由器广播出来的,例如我们手机wifi扫描到路由器的名称就是SSID。因此wifi装备也能得到路由器的SSID,其只要计算目前所能获得到的SSID的CRC值跟MAGIC的SSID CRC值1样,那以后的SSID数据就不用接收了,这样能够提高配置上网速度。Magic很重要,因此发送5遍。 2)PrefixCode为4个数据帧,两个帧的两个9bit记录PWD的数据长度,另外两个帧的两个9bit记录PWD长度的CRC校验值。Magic中发送的长度是所有数据的长度,包括密码PWD、随机数(wifi配置成功后要回复该随机数作为回复)和SSID。而这里是PWD的长度,用于对接收到的数据进行分段。 3)1个序列包括1个序列索引和1个序列数据。协议规定将有效数据以4个字节进行划分,不够补0。如我家路由的PWD是8313huang,那其会分为3个序列,分别是“8313”、“huan”“g���”进行发送。Sequence header包括索引值和CRC值,而Data field就是4个数据帧,包括要发送的数据,如“8313”等。 4)如何辨别Magic、Prefix、Sequence和Data,是由9bit的最高几个bit来辨别的。例如最高bit为1时表示是Data,其他是控制字段。 3.利用层 利用层即是手机配置上网APP要发送的数据,包括3部份的数据。分别是: 1)PWD。其先被发送是由于其是最重要的,而SSID已在MAGIC字段中所确认。 2)1个字节的随机数。wifi配置成功后要发送以该随机数为内容的UDP广播包作为回复,APP收到后即认为wifi装备已成功联网。 3)SSID。
|