专栏首页FreeBuf无线网络嗅探中的Radiotap

无线网络嗅探中的Radiotap

引言

在WLAN无线网络抓包的时候不管是用wireshark、tcpdump还是scapy都会出现Radiotap、LLC、SNAP协议层。

如图所示:

LLC逻辑逻辑链路控制子层(包括SNAP)和MAC介质访问控制子层共同组成了数据链路层。

LLC主要负责向上层协议服务MAC层主要负责局域网寻址以及避免竞争向下服务想更深入了解可以搜一下。

下面主要解释Radiotap的结构和蕴含的信息。

Radiotap

简介

Radiotap is a facto standard for 802.11 frame injection and reception.

这句话摘自radiotap的官方文档Radiotap是802.11帧注入和接收的事实上的标准(来自谷歌翻译)。

很多种操作系统支持Radiotap包括linux、windows…

Radiotap一般在网卡接收到无线帧时添加如果内核允许driver to userspace 和 userspace to driver 都是可以的。

这也是为什么我们在monitor模式(内核允许)抓包时会看到summary中最前面的Radiotap协议层。

它提供了无线协议帧相关的信息比如信号强度、噪声强度、信道、时间戳等。

最后radiotap中添加的信息是与网卡有关的比如WN722N网卡添加的present字段第32比特都是1山寨8187网卡就都是0…

下面详细解释:

协议头部结构

一般情况整个头部共8byte 32bit8(versiont) + 8(pad) + 16(len) = 32(present)

1. 当前版本version字段始终为0 2. pad字段是为了补齐四个字节而置0的字段因此radiotap开头均为\x00\x00 3. len为整个radiotap数据层的长度不需要解析时方便直接跳过 4. present为radiotap协议数据的位掩码某位为1时表示这个位代表的数据存在存放在头部后面。 比如bit5(下标)表示后面存在信号强度数据bit31表示还有另一个present字段存在。 因为位掩码的存在raditap协议的数据是不定长的也让radiotap变得很灵活当出现新的字段时不会破坏现有的解析器。 当出现了不能理解的radiotap数据可以通过len直接跳过继续解析上层数据。 5. 因为present字段可能存在多个所以说上面的头部长可能会变长但要注意8byte对齐以0补位比如WN722N抓到的

协议数据内容

协议中有已定义(defined)、讨论中(suggested)、被抛弃的(rejected)的字段。

大多数时候我们关心的是已定义的几个有丰富信息的字段详情需参考官网介绍。

名称

位数

长度

单位

介绍

TSFT

0

u64

微秒

数据帧第一bit抵达的时间

Rate

2

u8

500Kbps

发送或接收的速度

Channel

3

u16 frequency,+u16 flags

MHz + bitmap

信道的频率和flags

Antenna signal

5

s8

dbm

接收时信号在天线的强度

Antenna noise

6

s8

dbm

接收时噪声在天线的强度

dBm TX power

10

s8

dbm

发射功率(有符号)

由于Radiotap协议很灵活很多时候其中会有厂商自定义的字段。

注意取出信号强度的时候数据为有符号整数且强度均为负数需要先减1再取反得到正确的绝对值详情参考负数补码表示。

另外想取得上面的字段还要看你的网卡资不资词当然希望它是资词的。

此外每个字段的名称在wireshark中也略有差异如图为wireshark中包含两个present时的字段名称。

如何过滤

Proto is one of ether, fddi, tr, wlan, ppp, slip, link, ip, arp, rarp, tcp, udp, icmp, ip6 or radio, and indicates the protocol layer for the index operation. (ether, fddi, wlan, tr, ppp, slip and link all refer to the link layer. radio refers to the “radio header” added to some 802.11 captures.)

截自BPF文档BPF语法提供了对RadioTap协议的过滤支持即为’radio‘。

可以在scapy 的sniff函数 的filter参数或者在tcpdump 等等使用bpf语法过滤的过滤器中使用。

比如想过滤present字段为0x0024的数据包时filter=’radio[2:2]==0x2400’ (scapy)。

另外想过滤某些位均可以通过‘与’操作(&)获得filter=’radio[2]&7==7’。

此外需要特别注意的是radiotap协议中字节序为小端序也就是某个字段有多个字节时低位的字节被先发送。

例如 present字段的0x12 23 34 45在无线网络中按接收的先后顺序为0x45 34 23 12这点在scapy中使用str(packet) 和 wireshark中的packet bytes栏中都可以观察的到。

所以在使用过滤语法时一定要考虑字节序的问题低位在前。

如何解析

使用scapy

summary:

show:

可以看到scapy解析除了version、pad、len第一个present但present中的Ext代表着还有另外的present字段存在。

所以scapy对radiotap的支持不是很好余下未解析的数据都放在notdecode中(小端字节序)scapy通过len字段直接跳过radiotap解析了上层数据。

使用radiotap-library

这个库在官网中也有介绍另外这篇文章中也有这个库的简单使用方法是c语言的库在linux内核中有应用。

因为喜欢在python中编程所以曾经想自己改一下函数生成一个动态链接库由python调用但我后来偶然发现了下面的库。

使用itamae

当pip search radiotap时会发现另外一个库

itamae (0.1.1) - Python 802.11 MPDU and Radiotap parsing

安装后itamae的radiotap子模块的介绍中写道

provides radiotap parsing (radiotap.org defined fields) only. NOTE: o Will not parse correctly if extended fields are present prior to defined fields. o It is recommended not to import * as it may cause conflicts with other modules

表明了对支持radiotap协议的解析同时需要注意它只会成功解析含有一个present的数据包

使用时只需要把数据包的字符串传进去就可以了返回解析好的字典。

有什么好玩的用途

既然我们有了接收信号的强度测一测自己网卡的信号衰弱和距离的关系多次移动后就可以粗略的对信号源有一个定位了。

网上有很多很多RSSI(Received Signal Strength Indication)室内定位的算法可以参考一下。

想象一下你在咖啡厅嗅探外面商场的开放wifi突然看到了一个镁铝的自拍定个方向再去找是不是方便很多。

再或者企业是不是也可以通过大致的定位方便找出无线环境中多出的n多deauth dos攻击数据包的源头。

本文分享自微信公众号 - FreeBuf(freebuf),作者:addadd

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 勒索软件终结者:勒索软件,今天叔叔要教导你一些做人的道理!| 原创工具

    勒索软件终结者下载页面地址: http://www.pinchins.cn/ 哦对了,我们这里还收集所有勒索软件解密工具,以下是链接地址: http://www...

    FB客服
  • HTTPS迎来春天:Chrome计划将所有HTTP标记为不安全

    Chromium开发团队计划从2015开始将所有HTTP页面标记为不安全,并积极明确的告知用户,HTTP页面并不具有任何数据安全的保护能力,鼓励更多的网站实现更...

    FB客服
  • 七个黑你的理由

    常识告诉我们,用户是IT风险管理中最薄弱的一环,特别针对是一些“天真勇敢”的用户……但是黑客究竟是如何利用这种天真(缺乏保护意识)进入用户终端和公司账户的呢?他...

    FB客服
  • java之hibernate之helloworld

    2.增加一个lib文件夹,并把 hibernate必须的jar包 和 数据库驱动包 一起复制进去

    Vincent-yuan
  • JavaScript设计模式--桥梁模式--引入

    wfaceboss
  • 故障分析 | 同一条 SQL 为何在 MariaDB 正常,MySQL 5.7 却很慢?

    爱可生 DBA 团队成员,在公司负责项目中处理数据库问题,喜欢学习技术,钻研技术问题。

    爱可生开源社区
  • RapidIO消息操作与包格式

      分布式处理系统的一般方法是使用连接到分布式存储器部件的紧耦合处理器。这些处理器可能运行在一个単独的操作系统下。例如,,一个单Linux系统可以在最多数十个处...

    数字芯片社区
  • 前端-学习JavaScript是一种什么样的体验?

    嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化。听说你是这里对新技术最了解的 Web 开发...

    grain先森
  • 三四五线城市,移动互联网时代最后的红利

    最近,大家在大谈消费降级,其实这只是表象,真正的原因其实在于,商业巨子们都把目光投向了三四五线。从过去一年新崛起的商业新贵和创新产品来看,三四五线城市,这是移动...

    金融民工小曾
  • TCTF2019高校公开课武汉站开讲,如何成为一名专业的CTFer?

    五一长假过后, TCTF2019高校公开课又开始了新的旅程, 昨天下午我们如约在武汉大学跟大家相见~ 来,先感受一下现场的火爆人气! ? 对,又是座无虚席 ?...

    腾讯云安全

扫码关注云+社区

领取腾讯云代金券