博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无线报文头学习
阅读量:4117 次
发布时间:2019-05-25

本文共 2002 字,大约阅读时间需要 6 分钟。

无线报文格式的前2个字节用来描述帧控制信息。在驱动中用如下数据结构来描述:

struct ieee80211_frame{
u_int8_t i_fc[2];
u_int8_t i_dur[2];
union {
struct {
u_int8_t i_addr1[IEEE80211_ADDR_LEN];
u_int8_t i_addr2[IEEE80211_ADDR_LEN];
u_int8_t i_addr3[IEEE80211_ADDR_LEN];
};
u_int8_t i_addr_all[3*IEEE80211_ADDR_LEN];
};

i_fc[0]对应的是第一个字节,是网络字序。

第一个字节各位的含义是:
从最高位7开始,到第0位分别代表:
|-7-|-6-|-5-|-4-|-3-|-2-|-1-|-0-|
|– subtype –|-type -|- ver -|
即:
位7至位4,共4位,表示子类型subtype
位3至位2,共2位,表示类型type
位1至位0,共2位,表示协议版本,目前为0
type和subtype的取值范围是:
type的两位都填0,即type=00时,代表管理帧,进一步的子类型
subtype 4位可取值如下:
0000,0x0 Association request关联请求
0001,0x1 Association response关联响应
0010,0x2 Reassociation request重新关联
0011,0x3 Reassociation response重新关联响应
0100,0x4 probe request帧请求
0101,0x5 probe response响应
1000,0x8 beacon
1001,0x9 ATIM(通知传输指示消息)
1010,0xa Disassociation取消关联
1011,0xb Authentication身份认证
1100,0xc Deauthentication解除身份认证
1101,0xd Action
1110,0xe Action_NO_ACK
这里写图片描述
控制帧和管理帧类型对应上述2位取值分别是:01 和10
控制帧子类型分别有:
1001,9, BA
1010,a poll
1011,b rts
1100,c cts
1101,d ack
1110,e CF-End
1111,f CF-End
data帧子类型:
0000,0 data(非QOS)
0100,4 Null Data
1000 qos data
1001 qos data + cf - ack

说明:

1、身份认证请求无对应的身份认证响应帧,通过下面的控制帧ACK帧来确认。
2、无线连接过程是:先发认证帧(类型为0x0,子类型为0xb),得到ACK帧(类型为0x1,子类型为0xd)之后,再发关联帧(类型为0,子类型为0x0) 得到关联响应帧(类型为0x0,子类型为0x0)。
3、所有这类管理帧,都可以使用wlan.fc.type==0x0条件在wireshark中过滤出来。
4、可以通过指定wlan.fc.subtype==0xb && wlan.fc.type==0x0来过滤具体子类型为0xb认证帧。可以将两个条件合并成一个,书写方式是先写类型,再写子类型,过滤条件是:wlan.fc.type_subtype==0x0b。即第一个0代表类型0,管理帧,第二个b代表子类型为0xb,即身份认证子类型。

下图是一个标准的无线连接过程:

STA —-> AP (wlan.fc.type_subtype取值)
1.[STA–>AP] Probe request(wlan.fc.type_subtype==0x04)
2.[STA<–AP] Probe response(wlan.fc.type_subtype==0x05)
3.[STA–>AP] Authentication (wlan.fc.type_subtype==0x0b)
4.[STA<–AP] ACK(wlan.fc.type_subtype==0x1d)
5.[STA–>AP] Association request(wlan.fc.type_subtype==0x00)
6.[STA<–AP] Association response(wlan.fc.type_subtype==0x01)

驱动中定义了如下的类型:

这里写图片描述
忽略最低2位的话,实际管理帧是0000,控制0100,数据:1000
为了获取QOS帧,拿0xc|0x80与第0字节相与,结果如果与0x80|0x08相等,就是QOS数据帧。
0xc定义为掩码
0x08定义为type为数据类型
0x80则是QOS的公共头
所有1xxx的数据均为QOS帧。

你可能感兴趣的文章
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>
Android-Socket登录实例
查看>>
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第四章 - 程序计数器
查看>>
第七章 - 本地方法栈
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>