802.11中的各种帧
在无线网络中,802.11协议定义了三种类型的帧:管理帧(Management Frames)、控制帧(Control Frames)和数据帧(Data Frames)。每种类型的帧都有其特定的功能,帮助维护和管理无线网络。下面是管理帧和控制帧的详细介绍:
管理帧(Management Frames)
管理帧用于建立和维护无线网络中的连接。它们帮助设备发现网络、加入或离开网络,并保持连接的状态。常见的管理帧包括:
-
Beacon Frames(信标帧):
- 由接入点(AP)定期发送,以公告其存在和网络参数(如SSID、支持的数据速率、安全设置等)。
- 帮助设备发现并选择要连接的无线网络。
-
Probe Request/Response Frames(探测请求/响应帧):
- 探测请求帧由客户端设备发送,用于主动扫描可用的无线网络。
- 探测响应帧由AP发送,以响应探测请求帧,提供网络信息。
-
Authentication Frames(认证帧):
- 用于设备和AP之间的身份验证过程。
- 确保设备是合法用户,可以加入网络。
-
Deauthentication Frames(解除认证帧):
- 用于终止设备和AP之间的认证关系。
- 通常在设备离开网络或发生安全事件时发送。
-
Association Request/Response Frames(关联请求/响应帧):
- 关联请求帧由客户端设备发送,用于请求与AP建立连接。
- 关联响应帧由AP发送,以确认或拒绝连接请求。
-
Disassociation Frames(解除关联帧):
- 用于终止设备和AP之间的关联关系。
- 通常在设备离开网络或需要重新建立连接时发送。
控制帧(Control Frames)
控制帧用于帮助管理数据传输过程,确保数据帧在无线网络中的可靠传输。常见的控制帧包括:
-
ACK Frames(确认帧):
- 由接收方发送,以确认成功接收到数据帧。
- 发送方在接收到ACK帧后,会继续发送下一个数据帧。
-
RTS Frames(请求发送帧):
- 由发送方发送,用于请求对信道的使用权限。
- 用于减少冲突,特别是在高流量或干扰环境中。
-
CTS Frames(清除发送帧):
- 由接收方发送,以响应RTS帧,授予发送方对信道的使用权限。
- 通过CTS帧,网络中的其他设备知道发送方将占用信道,并避免冲突。
-
PS-Poll Frames(省电轮询帧):
- 由省电模式的客户端设备发送,用于请求AP发送缓冲的数据帧。
- 帮助省电模式下的设备高效地接收数据。
-
Block Acknowledgement Frames(块确认帧):
- 用于高效确认一组数据帧,而不是每个帧单独确认。
- 提高传输效率,特别是在高速无线网络中。
捕获管理帧和控制帧
在监控模式下,可以使用 tcpdump
或 gopacket
捕获管理帧和控制帧。以下是捕获所有管理帧和控制帧的示例:
-
使用
tcpdump
捕获管理帧和控制帧:
sudo tcpdump -i wlan0mon -e -s 0 type mgt or type ctl
-
使用
gopacket
捕获和解析管理帧和控制帧的 Go 代码:
package mainimport ("fmt""log""github.com/google/gopacket""github.com/google/gopacket/layers""github.com/google/gopacket/pcap"
)func main() {// 设置网络接口名称和抓包过滤器iface := "wlan0mon"snaplen := int32(65535)promisc := falsetimeout := pcap.BlockForeverfilter := "type mgt or type ctl"// 打开网络接口进行抓包handle, err := pcap.OpenLive(iface, snaplen, promisc, timeout)if err != nil {log.Fatal(err)}defer handle.Close()// 设置 BPF 过滤器if err := handle.SetBPFFilter(filter); err != nil {log.Fatal(err)}fmt.Println("Capturing Wi-Fi Management and Control frames on interface", iface)// 开始抓包packetSource := gopacket.NewPacketSource(handle, handle.LinkType())for packet := range packetSource.Packets() {processPacket(packet)}
}func processPacket(packet gopacket.Packet) {// 获取 802.11 层dot11Layer := packet.Layer(layers.LayerTypeDot11)if dot11Layer == nil {return}dot11, _ := dot11Layer.(*layers.Dot11)// 判断帧类型switch dot11.Type {case layers.Dot11TypeMgmt:fmt.Println("Management Frame captured:")// 处理管理帧,获取具体类型switch dot11.Subtype {case layers.Dot11MgmtSubtypeBeacon:fmt.Println(" Beacon Frame")case layers.Dot11MgmtSubtypeProbeReq:fmt.Println(" Probe Request Frame")case layers.Dot11MgmtSubtypeProbeResp:fmt.Println(" Probe Response Frame")// 可以添加更多管理帧类型default:fmt.Println(" Other Management Frame")}case layers.Dot11TypeCtrl:fmt.Println("Control Frame captured:")// 处理控制帧,获取具体类型switch dot11.Subtype {case layers.Dot11ControlSubtypeAck:fmt.Println(" ACK Frame")case layers.Dot11ControlSubtypeRTS:fmt.Println(" RTS Frame")case layers.Dot11ControlSubtypeCTS:fmt.Println(" CTS Frame")// 可以添加更多控制帧类型default:fmt.Println(" Other Control Frame")}default:fmt.Println("Other Frame Type captured")}
}
总结
管理帧和控制帧在无线网络中起着关键作用,分别用于建立和维护连接,以及管理数据传输过程。在监控模式下,你可以使用工具如 tcpdump
或编程库如 gopacket
来捕获和分析这些帧,了解无线网络的工作状态。
相关文章:
802.11中的各种帧
在无线网络中,802.11协议定义了三种类型的帧:管理帧(Management Frames)、控制帧(Control Frames)和数据帧(Data Frames)。每种类型的帧都有其特定的功能,帮助维护和管理…...

SAP PP学习笔记21 - 计划策略的Customize:策略组 > 策略 > 需求类型 > 需求类(消费区分,计划区分)
上面几章讲了MTS,MTO,ATO的计划策略。 本章来讲一下它的后台 Customize。 1,Customizeing:Planned Indep.Reqmts Management 这是配置计划策略的整个过程: - Requirements Type / Class 需求类型 / 需求类 - Plann…...

axure9设置组件自适应浏览器大小
问题:预览时不展示下方的滚动条 方法一:转化为动态面板 1.在页面上创建一个矩形 2.右键-转化为动态面板 3.双击进入动态面板设置 4.设置动态面板矩形的颜色 5.删除原来的矩形 6.关闭动态面板,点击预览 7.此时可以发现底部没有滚动条了 方法…...

示例:WPF中TreeView自定义TreeNode泛型绑定对象来实现级联勾选
一、目的:在绑定TreeView的功能中经常会遇到需要在树节点前增加勾选CheckBox框,勾选本节点的同时也要同步显示父节点和子节点状态 二、实现 三、环境 VS2022 四、示例 定义如下节点类 public partial class TreeNodeBase<T> : SelectBindable<…...
C++ explicit关键字的用法
在C中,explicit关键字用于构造函数和转换运算符,以防止隐式转换。它可以帮助我们避免意外的类型转换,从而提高代码的安全性和可读性。explicit关键字只能用于单参数构造函数和转换运算符。 使用explicit的场景 单参数构造函数: 当…...

51.Python-web框架-Django开始第一个应用的增删改查
目录 1.概述 2.创建应用 创建app01 在settings.py里引用app01 3.定义模型 在app01\models.py里创建模型 数据库迁移 4.创建视图 引用头 部门列表视图 部门添加视图 部门编辑视图 部门删除视图 5.创建Template 在app01下创建目录templates 部门列表模板depart.ht…...

Redis之线程IO模型
引言 Redis是个单线程程序!这点必须铭记。除了Redis之外,Node.js也是单线程,Nginx也是单线程,但是他们都是服务器高性能的典范。 Redis单线程为什么能够这么快! 因为他所有的数据都在内存中,所有的运算都…...

针对微电网中可时移,柔性,基础负荷的电价响应模型---代码解析
前言: 在上两篇帖子中,讲解了我对于粒子群算法的理解,站在巨人的肩膀上去回望:科研前辈们确实非常牛逼,所以它才成为了非常经典的算法。这篇帖子主要是想分享一下,对于微电网、电力系统的论文中,…...
git使用http协议时免密pull和push方法
1、创建文件 在项目目录下创建.git-credentials文件,内容如下,填入自己的用户名和密码即可,如果是gitlab,把地址换成自己的gitlab的地址即可。 https://{用户名}:{密码}github.com2、终端执行 git config --global credential.…...
编译期间生成代码(Lombok原理)
通过在编译期间,修改Java的AST(Abstract Syntax Tree)树,可以往类中,添加/修改(覆盖)方法、属性等。 现在比较常见的三方依赖例子有:Lobbok的Data可以生成get、set方法,Sl4j2可以生成静态常量l…...

第2讲:pixi.js 绘制HelloWorld
基于第0讲和第1讲,我们增添了vite.config.ts文件。并配置了其他的http端口。 此时,我们删除掉没用的东西。 删除 conter.ts、typescript.svg 在main.ts中改成如下内容: import {Application, Text} from pixi.js import ./style.css// 指明…...
golang HTTP2 https测试POST变GET问题小记
概述 因为工作需要协助修改某个golang程序,添加双向认证。但是在调整的过程遇到一个HTTP POST请求变成GET诡异的问题,最后各种搜索,总算解决,博文记录,用于备忘。 代码 服务端 因工作内容,代码有删减&a…...
Linux下的lvm镜像与快照
lvm镜像(mirror) (1)划分三个PV,其中2个PV大小要一模一样 Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units cylinders of 16065 * 512 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/…...

嵌入式linux系统中SPI子系统原理分析01
大家好,今天给大家分享一下,如何使用linux系统中的SPI通信协议,实现主从设备之间的信息传递。 SPI是一种常见的设备通用通信协议。它是一个独特优势就是可以无中断发送数据,可以连续发送或接收任意数量的位。而在I2C和UART中,数据以数据包的形式发送,有限定位数。 …...

Part 4.2 背包动态规划
->背包模型模板(0/1,分组,完全,多重)<- [NOIP2018 提高组] 货币系统 题目背景 NOIP2018 提高组 D1T2 题目描述 在网友的国度中共有 n n n 种不同面额的货币,第 i i i 种货币的面额为 a [ i ] a[i] a[i],你可以假设每…...

Elasticsearch-使用Logstash同步Mysql
1.安装logstash es服务器版本必须和logstash版本一致 7.9.2 在/usr/local/src/下新建logstash文件夹,解压 下载logstash后查看是否安装成功,在logstash的bin目录下输入指令: ./logstash -e input { stdin { } } output { stdout {} }2.my…...

6.17作业
升级优化自己应用程序的登录界面。 要求: 1. qss实现 2. 需要有图层的叠加 (QFrame) 3. 设置纯净窗口后,有关闭等窗口功能。 4. 如果账号密码正确,则实现登录界面关闭,另一个应用界面显示。 //发送端头文件…...

算法思想个人总结(结合生活理解)
主要思想: 结合生活和游戏理解思想,先知道什么场景用什么算法,然后再理解就能记住 遇到问题可以考虑选择使用,这样才是学活了 https://www.yuque.com/yuqueyonghu5znoyv/ifb5ga/nfcvg3ft9ryuqeem?singleDoc# 《元启发式算法》...

openh264 帧间预测编码过程源码分析
openh264 OpenH264 是一个开源的 H.264 编码和解码器,由思科系统开发并维护。它专为实时应用程序如 WebRTC 设计,提供了从基础到高级特性的广泛支持。OpenH264 的编码器支持从 Constrained Baseline Profile 到 5.2 级别,允许任意分辨率的编…...

Linux网络 - HTTP协议
文章目录 前言一、HTTP协议1.urlurl特殊字符 requestrespond 总结 前言 上一章内容我们讲了在应用层制定了我们自己自定义的协议、序列化和反序列化。 协议的制定相对来讲还是比较麻烦的,不过既然应用层的协议制定是必要的,那么肯定已经有许多计算机大佬…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...