0%

Radiotap、Prism 和 802.11 帧格式分析

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.11802.3一样,主要定义了OSI模型中物理层和数据链路层的相关规范,其中数据链路层由MAC子层和LLC子层组成,802.11802.3LLC子层统一由802.2描述,802.2是为各种媒介向上层提供一个统一的接口。可不管是有线或者无线,都是以802.2为标准,进行封装的。一张老图描述802协议簇在OSI模型关系

OSI

Radiotap

Radiotap 官网

monitor模式下802.11在收到帧之后还要在外边包一层称为prismradiotap的头部,里面包含无线协议帧相关的信息,诸如信号强度、噪声强度、信道、时间戳等。radiotap比传统的prismAVS头部更有灵活性,radiotap头已经完全取代了prism,两者功能一样,但前者是后者的扩展。该报头属于802.11的规范内容。

1557144650029

这个头部是在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

本文涉及

  1. Radiotap
  2. Prism

是在内核中处理,Linux 4.9相关代码linux/if_arp.hnet/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,如下
1557230043892

802.11 帧结构

和所有其他的802链路层一样,802.11可以传输各种不同的网络层协议。和以太网不同的是802.11是以802.2的逻辑链路控制封装来携带上层协议。

802.11封装上层协议下图

1557148199457

RFC 1042802.1H均衍生自802.2的子网络访问协议(sub-network access protocol ,简称SNAP

AP使用加密模式时,802.11 MAC payload为加密状态,看不到内部封装,只有在非加密状态才能解包分析

协议关系图,从上到下三层分别为网络层、数据链路层和物理层,截图自网络协议图【科来软件 -2011】

1561025089882

MAC

具体802.11帧结构见 802.11 MAC 层airkiss是基于802.11 MAC 数据帧,因此后续分析全部基于数据帧

数据帧MAC头如下

1557147251762

其中Address字段由 To DS/From DS位来决定

1557147333236

示例

1557147475086

SNAP

SNAP全称Subnetwork Access Protocol,是802.2 LLC的扩展,具体见 Subnetwork Access Protocol

子网络访问协议SNAP规范了在IEEE802网络上传输IP 数据报的标准方法。换句话说,IP数据报可以封装在802.2 LLCSNAP数据链路层和802.3802.4802.5802.11网络物理层中,然后在IEEE802`网络上发送。

1557148967247

DASPSSAP0xAA0XAB时,802.11中只有数据帧含有SNAP,如下图

1557149262208

根据Type可以看出Ethernet type,可以看到继续解析层次为IP->UDP->DATA

加密帧结构

如下图

1557191433854

wireshark识别protocol802.11,更为上层的数据因为加密的原因无法识别,详细数据如下

1557191518505

airkiss 数据

1557191243718

总结

  1. 因为网卡及路由的原因,header长度不一定,因此采用连续发送1-4长度负载来确定整个链路层长度
  2. 因为采用mudp,因此会出现乱序
  3. 当链接加密AP时,只能分析到802.11,更高层协议因为加密原因无法拆包
  4. airkiss只关心data长度,不关心data内容

Ref

  1. IEEE 802.11 - libtins
  2. IEEE 802.2. LLC, Logical Link Control
  3. How to find out encapsulated protocol inside IEEE802.11 Frame?
  4. 无线网络嗅探中的 Radiotap
  5. Understanding the 802.11 Wireless LAN MAC frame format
  6. Subnetwork Access Protocol
  7. 以太网两种帧的格式 Ethernet_II and IEEE 802.3
  8. 802.11 网络协议细节
  9. Ethernet Encapsulation and De-encapsulation
  10. 80211 与 IEEE 802 网络技术族谱简介