修改beacon帧结构(3)帧结构修改示例【Linux内核-OpenWRT】
来源:互联网 发布:opengl 平移矩阵 编辑:程序博客网 时间:2024/06/11 18:52
假设现在我需要在Beacon帧中添加一个字段,应该如何添加呢?我们首先来看一看Beacon帧的帧结构(我们需要在Frame Body的保留字段进行字段的添加):
Beacon帧是管理帧的一种,管理帧使用信息元素(informationelement,带有数字标签的数据块)来与其他系统交换信息。信息元素是管理帧的可变长组件。信息元素通常包含一个ElementID(元素标识符)字段、一个Length(长度)字段以及一个长度不定的字段,如图所示:
查阅802.11规定的信息元素表可以发现,编号为7-15(OpenWRT程序中是8-15)的信息元素是未使用的保留元素,因此可以在Beacon帧中加入该编号范围内的自定义信息元素。要修改Beacon帧,就是要在其中加入自定义的信息元素。
基于上述思想及前面对Beacon帧产生、发送和接收、提取信息过程的梳理,我们做一个修改Beacon帧的示例,假设我们需要添加一个元素标识符为8、长度为1、具体内容为0x63的字段,方法很简单,只需在tx.c文件的__ieee80211_beacon_add_tim()函数尾部加入如下代码即可:
skb_put(skb, 3);
*pos++ = 8; /*元素标识符*/
*pos++ = 1; /*长度*/
*pos++ = 99; /*99也可以写作0x63*/
那么,写入的信息如何提取呢,我们在接收端rx.c文件的__ieee80211_rx_handle_packet()函数中对Beacon帧单独处理的部分加入如下代码,并使用printk函数将其通过串口打印出来即可:
u8* dest_addr,*src_addr;
dest_addr = ((struct ieee80211_hdr *)skb->data)->addr1;
src_addr = ((struct ieee80211_hdr *)skb->data)->addr2;
if (src_addr[0] == 0xe0) /*由于周围有许多AP发来Beacon帧,因此加入MAC地址过滤,只对目标AP发过来的Beacon帧作新增信息的提取*/
{
u8 *elements;
size_t baselen;
struct ieee80211_mgmt *mgmt = (void *)skb->data;
baselen = offsetof(struct ieee80211_mgmt, u.beacon.variable);
elements = mgmt->u.beacon.variable;
size_t left = skb->len - baselen;
const u8 *pos = elements;
while (left >= 2) {
u8 id, elen;
bool elem_parse_failed;
id = *pos++;
elen = *pos++;
left -= 2;
switch (id) {
case 8:
printk(KERN_INFO "entered the target segment 8 !!!!!!!\n");
printk(KERN_INFO "%02x\n",*pos);
break;
default:
break;
}
left -= elen;
pos += elen;
}
}
通过试验测试,在接收端成功的提取出了发送端写入的信息,Beacon帧修改成功。
- 修改beacon帧结构(3)帧结构修改示例【Linux内核-OpenWRT】
- 修改beacon帧结构(1)帧的写入和发送过程【linux内核-OpenWRT】
- 修改beacon帧结构(2)帧的接收与帧信息提取过程【Linux内核-OpenWRT】
- hostapd修改Beacon和Probe Response帧
- openwrt winshak 抓取无线beacon帧
- 修改SQL表结构[字段类型]示例代码
- (SQL)修改表结构[字段类型]示例代码
- 每日一得--修改SQL表结构[字段类型]示例代码
- linux 修改openwrt ntp服务器
- 修改表结构
- mysql 修改表结构
- ORACLE修改表结构
- 修改表结构
- MysQL 修改表结构
- SQL修改表结构
- 修改表结构
- SQLite3 table 结构修改
- 修改表结构
- 函数指针的几种用法
- nutch2.1在windows平台上使用eclipsedebug 存储在mysql的搭建过程
- Linux Debugging(二): 熟悉AT&T汇编语言
- 前端开发工程师
- HTML 中有用的字符实体
- 修改beacon帧结构(3)帧结构修改示例【Linux内核-OpenWRT】
- HDU1242 Rescue-BFS,优先队列
- POJ1208(模拟)
- ZOJ Monthly, December 2013
- Flume-ng配置
- u-boot移植第三弹——移植2013.10u-boot到RealARM210 cortex-A8开发板(支持moviNAND_Fusing_Tool_v2.0)
- UITextView 添加 pleaceholder
- POJ 3694 双连通缩点+LCA+并查集
- nutch2.1分布式抓取