802.11 MAC层帧解析

2024-05-08 00:18
文章标签 mac 解析 802.11

本文主要是介绍802.11 MAC层帧解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    注1:本文STA为station简称,AP为access piont简称。

    注2:本文属于个人理解,存在错误望见谅和指正。


1.MAC帧格式

对应的数据结构如下:

  1. typedef struct _rtw_ieee80211_hdr_qos {
  2. __le16 frame_ctl;
  3. __le16 duration_id;
  4. u8 addr1[ETH_ALEN];
  5. u8 addr2[ETH_ALEN];
  6. u8 addr3[ETH_ALEN];
  7. u16 seq_ctl;
  8. u8 addr4[ETH_ALEN];
  9. } 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)

  1. typedef struct _frame_contrl{
  2. unsigned char version:2;
  3. unsigned char type:2;      //00 管理帧 01控制帧 10数据帧 11保留
  4. unsigned char subtype:4;   //0000 0001 Association request/response;   0010 0011 reassociation request/response
  5.   //0100 0101 probe requset/response;         0110-0111 reserved
  6.   //1000 Beacon; 1001 Announcement traffic indication message(ATIM)
  7.   //1010 Disassociation                         1011 Authentication
  8.   //1100 Deauthentication 1101-1111 Reserved
  9. //unsigned char ToDS:1;
  10. unsigned char FromDS:2;/* 来自DS*/
  11. unsigned char MoreFrag:1;/*更多分段*/
  12. unsigned char Retry:1; /*重传*/
  13. unsigned char PwrMgt:1;/*电源管理*/
  14. unsigned char MoreData:1;/*更多数据*/
  15. unsigned char WEP:1;/*受保护帧*/
  16. unsigned char Rsvd:1;/*顺序*/
  17. }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来进行转发。其实,TxRx是无线网络中的发和收,也就是Radio;而SrcDst是真正的发送源和接收者


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信号强度,频道频率等。

    对应的数据结构如下:

  1. typedef struct _ieee80211_radiotap_header {
  2. u8 it_version; /* Version 0. Only increases
  3.  * for drastic changes,
  4.  * introduction of compatible
  5.  * new fields does not count.
  6.  */
  7. u8 it_pad;
  8. __le16 it_len; /* length of the whole
  9.  * header in bytes, including
  10.  * it_version, it_pad,
  11.  * it_len, and data fields.
  12.  */
  13. __le32 it_present; /* A bitmap telling which
  14.  * fields are present. Set bit 31
  15.  * (0x80000000) to extend the
  16.  * bitmap by another 32 bits.
  17.  * Additional extensions are made
  18.  * by setting bit 31.
  19.  */
  20. }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字段如下:

  1. #define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
  2. #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

序号 SubType 说明
8 1010 断开连接

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 

http://blog.chinaunix.net/uid-9525959-id-3326047.html

这篇关于802.11 MAC层帧解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968796

相关文章

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1

MySQL 筛选条件放 ON后 vs 放 WHERE 后的区别解析

《MySQL筛选条件放ON后vs放WHERE后的区别解析》文章解释了在MySQL中,将筛选条件放在ON和WHERE中的区别,文章通过几个场景说明了ON和WHERE的区别,并总结了ON用于关... 今天我们来讲讲数据库筛选条件放 ON 后和放 WHERE 后的区别。ON 决定如何 "连接" 表,WHERE

Mybatis的mapper文件中#和$的区别示例解析

《Mybatis的mapper文件中#和$的区别示例解析》MyBatis的mapper文件中,#{}和${}是两种参数占位符,核心差异在于参数解析方式、SQL注入风险、适用场景,以下从底层原理、使用场... 目录MyBATis 中 mapper 文件里 #{} 与 ${} 的核心区别一、核心区别对比表二、底

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

C++ 多态性实战之何时使用 virtual 和 override的问题解析

《C++多态性实战之何时使用virtual和override的问题解析》在面向对象编程中,多态是一个核心概念,很多开发者在遇到override编译错误时,不清楚是否需要将基类函数声明为virt... 目录C++ 多态性实战:何时使用 virtual 和 override?引言问题场景判断是否需要多态的三个关

Springboot主配置文件解析

《Springboot主配置文件解析》SpringBoot主配置文件application.yml支持多种核心值类型,包括字符串、数字、布尔值等,文章详细介绍了Profile环境配置和加载位置,本文... 目录Profile环境配置配置文件加载位置Springboot主配置文件 application.ym

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node