1.抓到的包有的是来自路由器,有的是来自手机.
虽然都是从手机端发出的组播包,但是wifi模块抓到的包从from_ds,to_ds的标记位来看,有时候这些组播包是来自路由器端,有的是来自手机端.(TODO:从我们外行的角度看,应该都是来自手机端的,为什么会来自路由器,需要进一步进行深究.)
来自手机端和来自路由器端的包头,地址信息是不同的.同时,收到的数据包长度也会不同.
关于包长的不同:
实际测试发现, 来自路由器的包长会多2个字节,因为它的帧类型为QOS_DATA_FRAME=0x88. 所以对包长的计算需要在wlan_netif.c中用如下代码进行区分.
if(frame->frame_type&0x80 == 0)
sniffer_callback(frame, datalen-30);//将包头和包长通过回调函数上传给上层
else // QOS_DATA_FRAME,帧头多2 个字节.
sniffer_callback(frame, datalen-32);//将包头和包长通过回调函数上传给上层
关于mac地址的不同:
当数据是发向路由器的:发送端地址就是实际发送设备的地址,接收端地址是路由器的mac地址(bssid),附加地址是实际的目的地址.
当数据包发自路由器的:发送端地址就是路由器的mac地址(bssid),接收端地址是实际的目的地址,附加地址是实际的发送设备的地址.
所以,在对抓到的包进行分析的时候,要判断fromDS和toDS标志位,然后提取出正确的源地址和路由器地址,从而判断是否是同一系列的数据包.
2.不同加密方式,包长不同.
阅读”乐鑫esp8266”的抓包代码发现:假设不加密时的包长为x,那么wep加密的包长为x+8,wpa(2)-aes加密的包长为x+16,wpa(2)-aes加密的包长为x+20
比如只发一个字节,那么抓到的包长:不加密为77,wep加密为85,aes加密为93,tkip加密为97.
因此,可以根据包长来判断是何种加密方式.
参考文献:
<802.11无线网络权威指南(第二版全_非扫描) >