无线电波传输距离(无穷远)
RSS=Pt+Gr+Gt-Lc-Lbf
RSS=接收信号强度
Pt=发射功率(规定不能发射超火100mw的)
Gr=接收天线增益
Gt=发射天线增益
Lc=电缆和栏头的衰耗
Lbf=自由空间损耗
网络类型
基本服务集(BSS):wifi通信最基本单元。分为:独立型网络(IBSS),基础网络型网络
独立型网络:上图左侧为独立基本服务集(independent BSS)。在独立基本服务集中,工作站相互之间可以直接通信,但两者间的距离必须在可以直接通信的范围内。通常,独立基本服务集是由少数几个工作站为了特定的目的而组成的暂时性网络,常见于会议室中支持个别会议之用,当会议结束随之瓦解。正因为持续时间不长、规模小且目的特殊,有时被称为特设BSS或者特设网络。
Ad Hoc模型:设备之间点对点通信,通信效率低
基础网络型网络:
扩展服务集(ESS):多个BSS网络通过DS组成更大的网络集
扫描阶段(SCAN)
认证阶段(authentication)
关联(association)
扫描阶段(找到时间长,被动扫描):通过侦听AP定期发送的Beacon帧来发现网络,该帧提供了AP及所在BSS相关信息。
(能迅速找到,主动扫描):STA依次在13个信道发送probe Request帧,寻找与STA所属有相同SSID的AP,如找不到相同的SSID得AP,则一直扫描。
wifi认证:open system,WEP,WPA-PSK,WPA-Enterprise,WPA2,Web Redirection
链路认证 :
开放系统身份认证(open-system authectication)
不对站点省份进行认证的认证方式
共享秘钥认证(shared-key authenctiation)也就是wep,用加密算法解密看明文密码是否和密文一样
预共享密钥可以是8~63之间任意长度的可打印的ASCII码.
使用WAP加密算法依赖Pairwise Master Key(PMK), PMK使用预共享密钥和SSID进行计算
当客户端拥有PMK, 它就与AP开始协商一个新的, 临时的密钥, 即Pairwise Transient Key(PTK)
每次在客户端连接和定期更换的时候动态的创建这些临时密钥
PTK组成
PMK
一个随机数
由AP提供, 即A-nonce
另一个随机数
由客户端提供, 即S-nonce
客户端的MAC地址
AP的MAC地址
通过在认证交换时检查Message Integrity Code(MIC)项, AP验证客户端是否真的有PMK
MIC是一个数据包的加密散列函数, 这个函数用于防止篡改和合适客户端具有这个密钥
如果MIC是不正确的, 那么PTK和PMK就是不正确的
如果攻击者拥有PMK, 则可以阅读其它客户端的的传输数据包, 以及接入AP
过程(四次握手)
WPA-PSK 初始化工作
产生PSK
PSK=PMK=pdkdf2_SHA1(passphrase, SSID, SSID length, 4096)
AP
广播SSID
AP_MAC(AA)→STATION
STATION
使用接受到的SSID, AP_MAC(AA)和passphares使用同样算法产生PSK
PSK=PMK=pdkdf2_SHA1(passphrase, SSID, SSID length, 4096)
STATION
发送一个随机数SNonce
STATION_MAC(SA)→AP
AP
接受到SNonce, STATION_MAC(SA)后产生一个随机数ANonce
然后用PMK, AP_MAC(AA), STATION_MAC(SA), SNonce, ANonce 用以下算法产生PTK
PTK=SHA1_PRF(PMK, Len(PMK), "Pairwise key expansion", MIN(AA, SA) || Max(AA, SA) || Min(ANonce, SNonce) || Max(ANonce, SNonce))
MIC Key=PTK前16个字节
提取这个PTK 前16 个字节组成一个MIC KEY
AP
发送上面产生的ANonce→STATION
STATION
用接收到ANonce 和以前产生PSK, SNonce, AP_MAC(AA), STATION_MAC(SA)用同样的算法产生PTK
提取这个PTK 前16 个字节组成一个MIC KEY
产生MIC值
用这个MIC KEY 和一个802.1x data 数据帧使用以下算法得到MIC值
MIC = HMAC_MD5(MIC Key, 16, 802.1x data)
STATION
发送802.1x data→AP
发送MIC→AP
用上面那个准备好的802.1x 数据帧在最后填充上MIC值和两个字节的0(十六进制)让后发送这个数据帧到AP。
收到这个数据帧后提取这个MIC。并把这个数据帧的MIC部分都填上0(十六进制)这时用这个802.1xdata 数据帧, 和用上面AP产生的MIC KEY 使用同样的算法得出MIC’。如果MIC’等于STATION发送过来的MIC。那么第四次握手成功。若不等说明则AP 和STATION 的密钥不相同, 或STATION 发过来的数据帧受到过中间人攻击, 原数据被篡改过。握手失败了。
客户端通过AP作为中继与认证服务器发生关系, 客户端与认证服务器间的认证协议封装在EAP(Extensible Authentication Protocol)里面, 这样可以使AP忽略认证细节
多个不同的认证技术在EAP上实现, 例如EAP-TLS和PEAP
当客户端认证成功, 认证服务器通知客户端认证成功, 并发送给AP一个PMK
接下去就是四次握手过程
接入认证是在关联后进行的
关联:STA发送给AP(association request)(SSID) AP返回给STA(association response)然后相互之间发送数据
wifi信息抓包工具:omnipeek 安装流程:https://cloud.tencent.com/developer/article/1661961
通过arp -a 查看MAC地址(widows下cmd) ipconfig -all查看电脑的IP地址
数据帧
控制帧:竞争期间的握手通信和正向确认(例如RTS信道预约成功,ACK等)结束非竞争期间等,通常与数据配合起来使用,负责区域清空,信道获得,载波侦听,肯定确认等,
管理帧: 用于STA和AP之间的协商,关系的控制,如关联,同步等。
如加入和退出无线网络以及处理接入点之间关联的转移。
wifi帧通用格式
prootocol version:(协议版本)通常为0
type:帧类型:控制帧,管理帧,数据帧
subtype:进一步判断帧的子类型
To DS:表示该帧是否是BSS向DS发送的帧
From DS:表示该帧是否是DS向BSS发送的帧
More Fragment:用于说明长帧被分段的情况,是否还有其他的帧,如果有则将该值设置为1
retry:(重传域):表示该分段是先前传输分段的重发帧
power managment:表示传输帧以后,站所采用的电源管理模式
more data:表示有很多帧缓存到站中。即至少有一个数据帧要发送给STA时设置为1
protected Frame:表示根据wep算法对帧主体进行加密。如果帧体分包被密钥处理过的数据,则设置为1,否则设置为0
order(序号域):在长帧分段传送时,该域设置为1表示接收者应该严格按照顺序处理该镇,否则设置为0
参考: https://blog.csdn.net/weixin_35771144/article/details/105782182
(IBSS数据帧的一种)
(WDS帧,数据帧的一种)
3.1) IBSS帧
3.1.1) 0000: Data
3.1.2) 0010: Null
3.2) From AP帧
3.2.1) 0000: Data
3.2.2) 1000: Data+CF+ASK
3.2.3) 0100: Data+CF+Poll
3.2.4) 1100: Data+CF+ACK+CF+Poll
3.2.5) 1010: CF+ACK
3.2.6) 0110: CF+Poll
3.2.7) 1110: ACK+CF+Poll
3.3) To AP帧
3.3.1) 0000: Data
3.3.2) 1000: Data+CF+ACK
3.3.3) 0010: Null
3.3.4) 1010: CF+ACK(no data)
3.4) WDS帧
null
wifi数据帧(携带数据)
Data:最简单的数据帧,用于无竞争/有竞争阶段
Data+CF-ack:仅用于无竞争阶段。除了携带数据外,该帧还携带对刚收到的数据的应答。
Data+CF-poll:被AP用来传递数据给移动节点
请求移动节点发送一个可能被缓存的数据帧
Data+CF-ack+CF-poll:把上述功能结合在一个帧中。
wifi数据帧(不携带数据)
Null function:能量管理帧中由AP指示节点进入节能状态
CF-ack(no data)
CF-poll(no data)
CF-ack+CF-poll(no data)
修改文件:vim /etc/apt/sources.list
阿里云源
执行apt-get update
-sudo apt-get update
sudo apt-get -y install git wget make flex bison gperf unzip
sudo apt-get -y install gcc-multilib
sudo apt-get -y install libssl-dev
sudo apt-get -y install llibncursers-dev
sudo apt-get -y install libreadline-dev
sudo apt-get -y install python python-pip
python -m pip install setuptools
python -m pip install wheel
python -m pip install aos-cube
python -m pip install esptool
python -m pip pyserial
python -m install scons