在monitor
模式下使用wireshark
抓包分析802.11
帧格式,用于分析Airkiss
协议及实现
802 协议及 OSI 模型
- 802.2 :逻辑链路控制 Logical Link Control
- 802.3 :以太网 Ethernet (CSMA/CD)
- 802.11:无线局域网 Wireless LAN
802.11
是一个协议簇,包括物理层规范、增强型 MAC 层规范及高层协议规范。
802.11
与802.3
一样,主要定义了OSI
模型中物理层和数据链路层的相关规范,其中数据链路层由MAC
子层和LLC
子层组成,802.11
和802.3
的LLC
子层统一由802.2
描述,802.2
是为各种媒介向上层提供一个统一的接口。可不管是有线或者无线,都是以802.2
为标准,进行封装的。一张老图描述802
协议簇在OSI
模型关系
Radiotap
monitor
模式下802.11
在收到帧之后还要在外边包一层称为prism
或radiotap
的头部,里面包含无线协议帧相关的信息,诸如信号强度、噪声强度、信道、时间戳等。radiotap
比传统的prism
或AVS
头部更有灵活性,radiotap
头已经完全取代了prism
,两者功能一样,但前者是后者的扩展。该报头属于802.11
的规范内容。
这个头部是在802.11
成帧后(RX)流经内核mac80211
层时加上去的,代码在net/mac80211
里。所以这是一个纯软件机制,这个头部对于底层无意义,像iwconfig
, iwlist scanning
这些工具显示出来的数据并不依赖这个头部的信息。那么它的用途是什么?答案是供给像wireshark
这样的协议分析工具用的,这样这些工具就不用实时从硬件获得 RF 射频信息,直接解析协议报文即可。
另外在
monitor
模式下发送(TX)流经802.11
层时需要脱掉radiotap
头部,也就是要求编写 raw 套接字程序通过monitor
状态的网卡发送802.11
帧时,需要手工把radiotap
头部加上,否则内核会认为是异常帧而丢弃。
Prism
各个帧的头部见 LINK-LAYER HEADER TYPES
本文涉及
是在内核中处理,Linux 4.9
相关代码linux/if_arp.h
及net/mac80211/iface.c
#define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */
#define ARPHRD_IEEE80211 801 /* IEEE 802.11 */
#define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */
#define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */
case NL80211_IFTYPE_MONITOR:
sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
sdata->dev->netdev_ops = &ieee80211_monitorif_ops;
sdata->u.mntr.flags = MONITOR_FLAG_CONTROL | MONITOR_FLAG_OTHER_BSS;
break;
因此在Linux 4.9
下抓包格式为802.11 plus Radiotap header
而在Linux 2.6
使用的wifi
驱动中有如下代码
#define RTMP_OS_NETDEV_SET_TYPE_MONITOR(_pNetDev) RTMP_OS_NETDEV_SET_TYPE(_pNetDev, ARPHRD_IEEE80211_PRISM)
因此抓包格式为802.11 plus Prism header
,如下
802.11 帧结构
和所有其他的802
链路层一样,802.11
可以传输各种不同的网络层协议。和以太网不同的是,802.11
是以802.2
的逻辑链路控制封装来携带上层协议。
802.11
封装上层协议下图
RFC 1042
与802.1H
均衍生自802.2
的子网络访问协议(sub-network access protocol ,简称SNAP
)
当AP
使用加密模式时,802.11 MAC payload
为加密状态,看不到内部封装,只有在非加密状态才能解包分析
协议关系图,从上到下三层分别为网络层、数据链路层和物理层,截图自网络协议图【科来软件 -2011】
MAC
具体802.11
帧结构见 802.11 MAC 层,airkiss
是基于802.11 MAC 数据帧
,因此后续分析全部基于数据帧
数据帧MAC
头如下
其中Address
字段由 To DS/From DS
位来决定
示例
SNAP
SNAP
全称Subnetwork Access Protocol
,是802.2 LLC
的扩展,具体见 Subnetwork Access Protocol
子网络访问协议SNAP
规范了在IEEE802
网络上传输IP 数据报的标准方法。换句话说,
IP数据报可以封装在
802.2 LLC,
SNAP数据链路层和
802.3、
802.4、
802.5或
802.11网络物理层中,然后在
IEEE802`网络上发送。
当DASP
、SSAP
为0xAA
或0XAB
时,在802.11
中只有数据帧含有SNAP
,如下图
根据Type
可以看出Ethernet type
,可以看到继续解析层次为IP
->UDP
->DATA
加密帧结构
如下图
wireshark
识别protocol
为802.11
,更为上层的数据因为加密的原因无法识别,详细数据如下
airkiss 数据
总结
- 因为网卡及路由的原因,
header
长度不一定,因此采用连续发送1-4
长度负载来确定整个链路层长度 - 因为采用
mudp
,因此会出现乱序 - 当链接加密
AP
时,只能分析到802.11
,更高层协议因为加密原因无法拆包 airkiss
只关心data
长度,不关心data
内容
Ref
- IEEE 802.11 - libtins
- IEEE 802.2. LLC, Logical Link Control
- How to find out encapsulated protocol inside IEEE802.11 Frame?
- 无线网络嗅探中的 Radiotap
- Understanding the 802.11 Wireless LAN MAC frame format
- Subnetwork Access Protocol
- 以太网两种帧的格式 Ethernet_II and IEEE 802.3
- 802.11 网络协议细节
- Ethernet Encapsulation and De-encapsulation
- 80211 与 IEEE 802 网络技术族谱简介