注2:本文属于个人理解,存在错误望见谅和指正。
1.MAC帧格式
对应的数据结构如下:
typedef struct _rtw_ieee80211_hdr_qos {
__le16 frame_ctl;
__le16 duration_id;
u8 addr1[ETH_ALEN];
u8 addr2[ETH_ALEN];
u8 addr3[ETH_ALEN];
u16 seq_ctl;
u8 addr4[ETH_ALEN];
} rtw_ieee80211_hdr_qos,*prtw_ieee80211_hdr_qos;
1.1 地址格式
addr1:接收地址(所有包都包含它)
addr2:传输地址(除ACK和CTS包外的其他包都包含它)
addr3:只用于管理包和数据包。
addr4:无线分布系统模式下,FROM DS和TO DS都被置位时使用。
下图中,占两个字节的Frame control ,其To DS和From Ds决定了这四个地址的使用。
Frame control对应的地址如下: (Little ENDIAN)
- typedef struct _frame_contrl{
- unsigned char version:2;
- unsigned char type:2; //00 管理帧 01控制帧 10数据帧 11保留
- unsigned char subtype:4; //0000 0001 Association request/response; 0010 0011 reassociation request/response
- //0100 0101 probe requset/response; 0110-0111 reserved
- //1000 Beacon; 1001 Announcement traffic indication message(ATIM)
- //1010 Disassociation 1011 Authentication
- //1100 Deauthentication 1101-1111 Reserved
- //unsigned char ToDS:1;
- unsigned char FromDS:2;/* 来自DS*/
- unsigned char MoreFrag:1;/*更多分段*/
- unsigned char Retry:1; /*重传*/
- unsigned char PwrMgt:1;/*电源管理*/
- unsigned char MoreData:1;/*更多数据*/
- unsigned char WEP:1;/*受保护帧*/
- unsigned char Rsvd:1;/*顺序*/
- }frame_contrl,*pfram_contrl;
地址对应表如下:
DS是分布式系统的简称,我们用它以区分不同类型帧中关于地址的解析方式。
To DS=0,From DS=0:表示Station之间的AD Hoc类似的通信,或者控制侦、管理侦。
To DS=0,From DS=1:Station接收的侦。
To DS=1,From DS = 0:Station发送的侦。
To DS=1,From DS = 1:无线桥接器上的数据侦。
各地址的解释:
SRC:源地址(SA),和以太网中的一样,就是发帧的最初地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
DST:目的地址(DA),和以太网中的一样,就是最终接受数据帧的地址,在以太网和wifi中帧格式转换的时候,互相可以直接复制。
TX:也就是Transmiter(TA),表示无线网络中目前实际发送帧者的地址(可能是最初发帧的人,也可能是转发时候的路由)。
RX:也就是Receiver(RA),表示无线网络中,目前实际接收帧者的地址(可能是最终的接收者,也可能是接收帧以便转发给接收者的ap)。
注:无线网络中的Station想要通信,必须经过AP来进行“转发”。其实,Tx和Rx是无线网络中的发和收,也就是Radio;而Src和Dst是真正的发送源和接收者
2 帧类型
帧类型由frame control的type两位决定,目前有三种类型的帧:
00,管理帧。IEEE80211_TYPE_MGMT 用于执行管理操作,如关联、身份验证,扫描等。
01,控制帧。IEEE80211_TYPE_CTL 通常与数据包相关。如:PS-poll包用于从AP缓冲区取回数据包;另一个例子,STA若想数据传输,首先会发送RTS的控制数据包,如果介质空闲,目标客户端将发回一个名为允许发送(CTS)的控制数据包。
10,数据帧。IEEE80211_TYPE_DATA 原始数据包。注:空数据包是特殊的数据帧,其用于电源管理。
11,保留。
2.1 SubType
2.1.1 管理帧 type 00
下表为管理帧的subType对应的类型(即type为00时,subType的取值)
Type | SubType | FrameType |
00 | 0000 | Association request (连接请求) |
00 | 0001 | Association response (连接响应) |
00 | 0010 | Reassociation request(重连接请求) |
00 | 0011 | Reassociation response(重连接联响应) |
00 | 0100 | Probe request(探测请求) |
00 | 0101 | Probe response(探测响应) |
00 | 1000 | Beacon(信标,被动扫描时AP 发出,notify) |
00 | 1001 | ATIM(通知传输指示消息) |
00 | 1010 | Disassociation(解除连接,notify) |
00 | 1011 | Authentication(身份验证) |
00 | 1100 | Deauthentication(解除认证,notify) |
00 | 1101~1111 | Reserved(保留,未使用) |
2.1.1.1(Beacon(信标)帧) subtype 1000
抓包显示的结果:
由于Beacon是广播包,因此DA为FF:FF:FF:FF:FF:FF。
作用:向STA广播AP的存在。也就是我们平时能够搜到AP的原因,其包含了AP的相关信息。
2.1.1.2 (Probe Request(探测请求)帧) subtype 0100
抓包显示的结果:
作用:STA广播发出,与AP建立关联的必然步骤,后面会具体说明。
2.1.1.3 (Probe Response(探测响应)帧) subtype 0101
作用:STA请求探测帧后,AP的相对应的回应帧。
2.1.1.4 (ATIM帧) subtype 1001
2.1.1.5 (Disassociation(解除关联)与Deauthentication(解除认证)帧) subtype 1010
2.1.1.6 (Association Request(关联请求)帧) subtype 0000
2.1.1.7 (Reassociation Request(重新关联请求)帧) subtype 0010
2.1.1.8 (Authentication(身份认证)帧) subtype 1011
2.1.2 数据帧 type 10
Type | Subtype | Frametype |
10 | 0000 | Data(数据) |
10 | 0001 | Data+CF-ACK |
10 | 0010 | Data+CF-Poll |
10 | 0011 | Data+CF-ACK+CF-Poll |
10 | 0100 | Null data(无数据:未传送数据) |
10 | 0101 | CF-ACK(未传送数据) |
10 | 0110 | CF-Poll(未传送数据) |
10 | 0111 | Data+CF-ACK+CF-Poll |
10 | 1000 | Qos Data |
10 | 1001 | Qos Data + CF-ACK |
10 | 1010 | Qos Data + CF-Poll |
10 | 1011 | Qos Data + CF-ACK+ CF-Poll |
10 | 1100 | QoS Null(未传送数据) |
10 | 1101 | QoS CF-ACK(未传送数据) |
10 | 1110 | QoS CF-Poll(未传送数据) |
10 | 1111 | QoS CF-ACK+ CF-Poll(未传送数据) |
|
2.1.2.1 IBSS subtype (0000 Data,0100NULL)
2.1.2.2 From AP subtype如图所示
2.1.2.3 To AP 帧
2.1.2.4 WDS帧 subtype null
2.1.3 控制帧 type 01
主要用于数据传输前的控制,相关过程请看4.0 RTS/CTS。
Type | Subtype | Frametype |
01 | 1010 | Power Save(PS)- Poll(省电-轮询) |
01 | 1011 | RTS(请求发送,即: Request To Send ,预约信道,帧长20字节) |
01 | 1100 | CTS(清除发送,即:Clear To Send ,同意预约,帧长14字节) |
01 | 1101 | ACK(确认) |
01 | 1110 | CF-End(无竞争周期结束) |
01 | 1111 | CF-End(无竞争周期结束)+CF-ACK(无竞争周期确认) |
2.1.3.1 RTS帧 subtype 1011
2.1.3.2 CTS帧 subtype 1100
2.1.3.3 ACK帧 subtype 1101
2.1.3.4 PS-Poll帧 subtype 1010
作用:当sta从省电模式中苏醒,便发送一个PS-poll给基站。
3. Radiotap Header(monitor信息)
在monitor模式时,内核在MAC帧前面提供额外的信息。称为Radiotap Header,其包含的信息有MAC时间戳,SSI信号强度,频道频率等。
对应的数据结构如下:
typedef struct _ieee80211_radiotap_header {
u8 it_version; /* Version 0. Only increases
* for drastic changes,
* introduction of compatible
* new fields does not count.
*/
u8 it_pad;
__le16 it_len; /* length of the whole
* header in bytes, including
* it_version, it_pad,
* it_len, and data fields.
*/
__le32 it_present; /* A bitmap telling which
* fields are present. Set bit 31
* (0x80000000) to extend the
* bitmap by another 32 bits.
* Additional extensions are made
* by setting bit 31.
*/
}ieee80211_radiotap_header,*pieee80211_radiotap_header;
这里的it_len表明了radiotap_header的长度,按上面抓到的包,这里的值为26。
因此,在monitor模式得到的RAW包,我们首先要偏移it_len个字节,以此得到MAC头。
4. RTS/CTS 帧 (数据发送原子性)
这两个帧出现的原因是 无线收发器(STA)通常无法同时收发数据。使用这两个帧可以让STA处于收或发状态。
这样比较好理解,正是因为如此,当STA开始发送RTS,说明STA发数据;AP开始发送RTS,说明RTS接收数据。
当其他STA收到RTS时,将延后数据包的发送。而具体延迟多久,由正在传输的MAC头中的持续时间决定(Duration ID)。如:
RTS(Request-to-Send):请求发送数据。
CTS(Clear-to-Send):清空传送区域。
两个帧的过程如图:
①为 STA ②为AP
抓的两个包来看下,下面是STA作为请求方
下面是STA作为接收方:
上图的223.252.199.6(00:36:76:54:b4:a2)是ap,172.21.11.2(a4:d1:d2:60:bb:0d)是STA,其Qos数据数据如下:
RTS和CTS帧会延长帧传输过程,RTS,CTS,数据帧,以及ACK视为同一原子操作的一部分。
用户可以通过调整RTS阈值,来控制RTS/CTS交换过程。只要大于此阈值,RTS/CTS交换过程就会进行,小于该阈值就会直接传送帧。
对应的SOCK字段如下:
- #define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
- #define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
5. WIFI建立关联过程
建立连接认证的过程主要由管理帧负责。
序号 | SubType | 说明 |
---|---|---|
1 | 1000 | Beacon,STA接受AP信标帧,感知到AP,获取SSID及AP参数 |
2 | 0100 | STA主动发送Probe探测请求 |
3 | 0101 | AP应答STA Prob Response |
4 | 1011 | STA发送Authentication请求认证 |
5 | AP应答Authentication请求,指示STA认证成功或失败 | |
6 | 0000 | STA发送Association请求 |
7 | 0001 | AP应答Association Response |
以上是连接过程,当需要断开连接时,STA发送Disassociation
5.1 wifi攻击原理
从连接的过程我们可以发现,我们可以采取强制断开连接,使得STA重新进行连接。以此获得认证数据包。
因此,可以利用Disassociation包或Deanthentication包实现。
6. 加密算法
安全认证主要由802.11i规范。以下是几种加密算法。具体的连接过程将在下篇中说明。
1)WEP,Wire Equivalent Private https://en.wikipedia.org/wiki/Wired_Equivalent_Privacy
2)CCMP, CTR with CBC-MAC protocol 基于AES加密 https://en.wikipedia.org/wiki/CCMP
3)WPA , Wi-Fi Protected Access https://en.wikipedia.org/wiki/WPA
4)TKIP,Temporal Key Integrity Protocal https://en.wikipedia.org/wiki/Temporal_Key_Integrity_Protocol
5)WPA2 ,Wi-Fi Protected Access 2 https://en.wikipedia.org/wiki/Wi-Fi_Protected_Access
本文参考《802.11无线网络 权威指南》
http://www.cnblogs.com/rainbowzc/p/5410876.html
http://blog.csdn.net/robertsong2004/article/details/42805803