尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

802.11帧控制字段逐位解析:从抓包实验到tshark自动化验证

发布时间:2026/9/27 1:20:16

资讯中心
01
ARTICLE

802.11帧控制字段逐位解析:从抓包实验到tshark自动化验证

802.11帧控制字段逐位解析:从抓包实验到tshark自动化验证
简介这份PDF实验报告面向计算机网络与无线通信方向的学生及自学者围绕802.11协议帧格式展开抓包分析适合作为课程实验参考或协议入门的实操范例。资源包共1个文件为537KB的PDF文档内容完整呈现实验目的、环境搭建、抓包步骤与结果分析便于直接查阅与对照学习。报告基于Ubuntu系统与Wireshark工具逐位解析了数据帧、RTS控制帧与信标管理帧的帧控制字段涵盖To DS、From DS、retry、powermgt、protected等标志位含义并强调大端模式下的阅读顺序帮助读者建立对MAC层帧结构的直观认识。目前已有400人学习适合需要理解无线局域网通信原理、完成同类实验或复习802.11帧格式的读者参考。1. 从一份 802.11 抓包实验报告说起为什么帧控制字段值得逐位抠很多人第一次用 Wireshark 抓 802.11 的包看到满屏的十六进制和0x0a08、0x0080这种帧控制字段第一反应是直接展开协议树看 Wireshark 帮我们翻译好的字段名很少有人愿意回到原始字节一位一位地对。这份《无线局域网抓包实验.pdf》恰恰反着来——它把数据帧、RTS 控制帧、信标管理帧的帧控制字段拆成二进制逐位标注 version、type、subtype、To DS、From DS、retry、powermgt 这些标志位再对照 802.11 标准里的帧格式表验证。它解决的不是怎么装 Wireshark这种入门问题而是抓到的这串字节到底哪几位是类型、哪几位是地址、为什么大端模式下要从左往右读这类真正卡人的细节。适合已经能跑通抓包、但对 MAC 帧结构还停留在看得懂协议树、看不懂原始字节阶段的同学也适合要带实验课、需要一份可对照的帧解析样例的助教。2. 实验环境搭建VirtualBox 里跑 Ubuntu 10.04 加 Wireshark 的完整链路2.1 为什么这份实验选 Ubuntu 10.04 而不是新版实验手册里明确要求 Ubuntu 10.04这不是随便定的。802.11 抓包对网卡驱动和内核的 monitor 模式支持很敏感Ubuntu 10.04 自带的内核版本对当时常见的无线网卡比如 Atheros、Ralink 系列在 monitor 模式下的兼容性比较稳Wireshark 版本也停留在 1.0.x 到 1.2.x 这个区间抓 802.11 管理帧和控制帧时不会像新版那样默认过滤掉一部分 radiotap 头信息。如果你用 Ubuntu 22.04 直接装最新 Wireshark会发现抓到的包 radiotap 头字段更丰富但帧控制字段的原始字节展示方式有变化对照实验报告里的0x0a08这种写法时容易对不上。常见做法是要么老老实实按手册用 Ubuntu 10.04 虚拟机要么在新系统上抓包后手动切到原始字节视图忽略 Wireshark 的字段翻译自己按位拆。2.2 VirtualBox 虚拟机配置与 Ubuntu 10.04 安装先装 VirtualBox新建虚拟机时注意几个参数内存给 1024MB 以上硬盘 8GB 够用网络模式选桥接网卡而不是 NAT——桥接才能让虚拟机的无线网卡直接看到空口上的管理帧和广播帧NAT 模式下很多 802.11 管理帧会被宿主机过滤掉。Ubuntu 10.04 的 ISO 镜像现在官方源已经归档需要从旧版本归档站找ubuntu-10.04.4-desktop-i386.iso这个文件。# 在 VirtualBox 宿主机上创建虚拟机命令行方式也可以直接用 GUI VBoxManage createvm --name WLAN-Lab --register VBoxManage modifyvm WLAN-Lab --memory 1024 --nic1 bridged --bridgeadapter1 eth0 VBoxManage storagectl WLAN-Lab --name SATA --add sata VBoxManage storageattach WLAN-Lab --storagectl SATA --port 0 --device 0 --type dvddrive --medium ubuntu-10.04.4-desktop-i386.iso这段命令做了三件事注册一台名为 WLAN-Lab 的虚拟机、把内存设为 1024MB 并把第一块网卡设为桥接模式、挂载 Ubuntu 10.04 的 ISO 作为光驱。--bridgeadapter1 eth0里的eth0要换成你宿主机实际的有线网卡名用ip link或ifconfig能看到。桥接模式下虚拟机会从宿主机所在网络拿一个独立 IP抓包时能看到同一网段内其他设备的 802.11 帧。安装完 Ubuntu 10.04 后先更新源再装 Wireshark。10.04 的默认源地址已经失效需要把/etc/apt/sources.list里的archive.ubuntu.com换成old-releases.ubuntu.com。# 替换源地址后更新并安装 Wireshark sudo sed -i s/archive.ubuntu.com/old-releases.ubuntu.com/g /etc/apt/sources.list sudo apt-get update sudo apt-get install wiresharksed那行是把源列表里的域名批量替换成归档站apt-get update刷新包索引最后装 Wireshark。安装过程中会弹出一个对话框问是否允许非 root 用户抓包选是这样后面不用每次sudo wireshark。装完后用wireshark --version确认版本实验报告里用的应该是 1.0.x 或 1.2.x 系列。2.3 网卡 monitor 模式配置与抓包参数Wireshark 默认抓的是普通模式下的包只能看到发给本机或广播的帧。要抓全空口的 802.11 帧得先把无线网卡切到 monitor 模式。# 查看无线网卡名通常是 wlan0 iwconfig # 关闭网卡切换模式再开启 sudo ifconfig wlan0 down sudo iwconfig wlan0 mode monitor sudo ifconfig wlan0 up # 确认模式已切换 iwconfig wlan0iwconfig wlan0 mode monitor是核心命令把网卡从 managed 模式切到 monitor 模式。切完后iwconfig输出里会显示Mode:Monitor。如果这一步报错说设备不支持说明虚拟机桥接的物理网卡驱动不支持 monitor 模式常见做法是换一块支持 monitor 模式的外置 USB 无线网卡在 VirtualBox 里把 USB 设备直通给虚拟机。启动 Wireshark 后在接口列表里选wlan0双击开始抓包。抓包过滤器里填wlan.fc.type 0只看管理帧或者wlan.fc.type 1只看控制帧wlan.fc.type 2只看数据帧。实验报告里分析的三种帧正好对应这三个 type 值。提示Ubuntu 10.04 的 NetworkManager 可能会在网卡切到 monitor 模式后自动把它切回 managed 模式抓包前先sudo stop network-manager停掉网络管理服务。3. 三种帧的逐位拆解数据帧、RTS 控制帧、信标管理帧对照分析3.1 数据帧的帧控制字段0x0a08 到底怎么读实验报告里第一个例子是数据帧帧控制字段两字节是0x0a08。这里有个血泪经验Wireshark 显示的字节顺序和实际传输顺序是反的。报告里写的是0x0a08二进制展开成0000 1010 0000 1000但 802.11 帧控制字段实际传输时第一个字节是0x08第二个字节是0x0a。报告里按大端模式从左往右读把0x0a08拆成字段位值含义Protocol Version200802.11 版本 0Type210数据帧Subtype40000普通数据帧To DS10不发给分布系统From DS11来自分布系统APMore Frag10无后续分片Retry11重传帧Power Mgmt10发送方未进入节电模式More Data10无更多数据Protected10帧体未加密Order10不要求严格顺序Type10对应数据帧Subtype0000对应普通数据帧。From DS1说明这帧是从 AP 发往终端的Retry1说明是重传。后面的 Duration 字段d500表示这帧和它的确认帧会占用信道多长时间单位是微秒。地址字段0022698EA744是发送方AP 的 MAC0611b51a0a05是接收方终端的 MAC。最后四字节040a3032是 CRC 校验码。在 Wireshark 里对照时展开 IEEE 802.11 协议树找到 Frame Control 字段把每个子字段的值和上表对一遍。如果 Wireshark 显示的字节顺序和报告里不一致在 Wireshark 的视图菜单里把字节序切到网络序再看。3.2 RTS 控制帧0x00b4 的 type 和 subtype 怎么定位RTS 帧的帧控制字段是0x00b4二进制0000 0000 1011 0100。按同样的拆法Protocol Version00Type01对应控制帧Subtype1011对应 RTSTo DS、From DS、More Frag 等标志位全 0RTS 帧的作用是发送方在发数据前先发一个 RTS告诉接收方我要发数据了请准备好接收方回一个 CTS 帧其他站点听到 CTS 后就推迟发送避免冲突。RTS 帧的 Duration 字段6709表示这次传输会占用信道多久后面的接收方地址和发送方地址各六字节最后四字节 CRC。实验报告里提到接收方地址、发送方地址、校验码等等全都为 0这可能是抓包时抓到了一个不完整的 RTS 帧或者 Wireshark 解析时把某些字段标成了 0。实际抓包时 RTS 帧的地址字段一般不会全 0如果遇到全 0 的情况先检查是不是抓到了帧的尾部而不是头部。# 在 Wireshark 里用显示过滤器只看 RTS 帧 wlan.fc.type 1 wlan.fc.subtype 11wlan.fc.type 1过滤控制帧wlan.fc.subtype 11过滤 RTSsubtype 值 11 对应二进制 1011。CTS 帧的 subtype 是 12ACK 帧是 13。用这个过滤器能快速定位到实验报告里分析的那类帧。3.3 信标管理帧0x0080 与 BSSID 字段解析信标帧的帧控制字段是0x0080二进制0000 0000 1000 0000。Type00对应管理帧Subtype1000对应信标帧。信标帧是 AP 定期广播的用来通告网络的存在里面包含 SSID、支持速率、信道等信息。信标帧的帧结构比数据帧多几个字段Duration 两字节、目的地址六字节通常是广播地址ff:ff:ff:ff:ff:ff、源地址六字节AP 的 MAC、BSSID 六字节通常和源地址相同、序列号两字节、帧体包含 SSID 等参数、CRC 四字节。实验报告里提到六字节的 bssid 两字节的帧序列数据最后是校验序列这个顺序是对的。在 Wireshark 里抓信标帧时显示过滤器用wlan.fc.type 0 wlan.fc.subtype 8wlan.fc.type 0过滤管理帧wlan.fc.subtype 8过滤信标帧。抓到的信标帧展开后能看到 SSID 参数、Supported Rates、DS Parameter Set信道号等。如果抓不到信标帧检查网卡是不是在 monitor 模式以及是不是在正确的信道上——信标帧只在 AP 所在信道上广播网卡如果锁在别的信道就抓不到。注意Ubuntu 10.04 下 Wireshark 抓 802.11 帧时radiotap 头里会包含信道和信号强度信息但不同网卡驱动的 radiotap 头长度不一样解析帧控制字段前先确认 radiotap 头的长度跳过它再读 802.11 帧头。4. 避坑与排查抓不到帧、字段对不上、模式切不过去怎么办4.1 抓不到任何 802.11 帧现象Wireshark 接口列表里选了 wlan0开始抓包后一个包都没有或者只有零星几个广播包。原因网卡没切到 monitor 模式或者虚拟机网络模式是 NAT 而不是桥接。NAT 模式下虚拟机只能看到自己的流量空口上的管理帧和控制帧全被宿主机过滤了。解决先iwconfig wlan0确认Mode:Monitor如果不是就按 2.3 节的命令切。再检查 VirtualBox 虚拟机设置里的网络模式改成桥接网卡并选对宿主机物理网卡。如果宿主机用的是无线网卡有些驱动不支持桥接常见做法是换有线网卡桥接或者用 USB 无线网卡直通给虚拟机。4.2 帧控制字段的字节顺序和报告对不上现象Wireshark 里看到的帧控制字段是0x080a但实验报告里写的是0x0a08。原因Wireshark 默认按小端模式显示多字节字段而 802.11 帧在实际传输时是按大端模式逐字节发送的。报告里按大端模式读所以顺序相反。解决在 Wireshark 的视图菜单里找到字节序选项从主机序切到网络序。或者在解析时手动把两个字节交换后再展开二进制。这个坑在分析 Duration、序列号等多字节字段时也会遇到养成先确认字节序再读值的习惯。4.3 Ubuntu 10.04 源失效导致装不上 Wireshark现象apt-get update报一堆 404apt-get install wireshark提示找不到包。原因Ubuntu 10.04 已经过了支持周期官方源移到了归档站默认的archive.ubuntu.com地址已经不可用。解决按 2.2 节的命令把/etc/apt/sources.list里的archive.ubuntu.com替换成old-releases.ubuntu.com再apt-get update。如果还报错检查源列表里有没有security.ubuntu.com也需要替换。替换完记得apt-get upgrade一次把包索引更新到最新。4.4 monitor 模式切完后自动变回 managed现象iwconfig wlan0 mode monitor执行成功但过几秒再查又变回Mode:Managed。原因NetworkManager 服务在后台运行检测到网卡模式变化后会自动把它改回受管模式。解决抓包前先sudo stop network-manager停掉服务抓完再sudo start network-manager恢复。如果用的是 Ubuntu 10.04 的桌面版也可以在网络管理器图形界面里把无线连接禁用再手动切 monitor 模式。4.5 RTS 帧地址字段全为 0现象抓到的 RTS 帧里接收方地址和发送方地址都是00:00:00:00:00:00。原因可能是抓到了帧的尾部而不是头部或者网卡驱动在 monitor 模式下没有正确填充地址字段。有些廉价无线网卡在 monitor 模式下只抓帧体不抓帧头导致地址字段丢失。解决换一块支持 monitor 模式且驱动成熟的网卡常见的是 Atheros AR9271 或 Ralink RT3070 芯片的 USB 网卡。在 Wireshark 里检查 radiotap 头是否完整如果 radiotap 头里没有IEEE80211_RADIOTAP_F_FCS标志说明帧校验序列可能被截断了。5. 从逐位解析到自动化验证用 tshark 批量提取帧控制字段手动在 Wireshark 里一位一位拆帧适合做实验报告但如果你要分析几百个帧的 type 和 subtype 分布手动拆就太慢了。我一般会用 tsharkWireshark 的命令行版本批量导出帧控制字段再用脚本统计。Ubuntu 10.04 下 tshark 随 Wireshark 一起安装命令是tshark。# 抓 100 个包并导出帧控制字段到 CSV tshark -i wlan0 -c 100 -T fields -e wlan.fc.type -e wlan.fc.subtype -e wlan.fc.retry -e wlan.fc.fromds -e wlan.fc.tods -E separator, fc_fields.csv # 统计各 type 出现次数 cut -d, -f1 fc_fields.csv | sort | uniq -c第一行命令里-i wlan0指定抓包接口-c 100抓 100 个包后停止-T fields表示按字段输出-e后面跟要提取的字段名-E separator,指定 CSV 分隔符。wlan.fc.type是帧类型wlan.fc.subtype是子类型wlan.fc.retry是重传标志wlan.fc.fromds和wlan.fc.tods是分布系统方向标志。第二行用cut取第一列typesort排序后uniq -c统计每个值出现次数。如果输出里 type0 有 30 个、type1 有 10 个、type2 有 60 个说明管理帧、控制帧、数据帧的比例大概是 3:1:6。# 用 Python 解析 tshark 导出的 CSV统计 subtype 分布 import csv from collections import Counter subtype_names { (0, 8): Beacon, (0, 5): Probe Response, (0, 4): Probe Request, (1, 11): RTS, (1, 12): CTS, (1, 13): ACK, (2, 0): Data, (2, 4): Null, (2, 8): QoS Data } counter Counter() with open(fc_fields.csv) as f: reader csv.reader(f) for row in reader: if len(row) 2: key (int(row[0]), int(row[1])) counter[key] 1 for (t, s), count in counter.most_common(): name subtype_names.get((t, s), fType{t}-Sub{s}) print(f{name}: {count})这段 Python 脚本读fc_fields.csv把每行的 type 和 subtype 转成整数后作为键用Counter统计出现次数。subtype_names字典把常见的 type/subtype 组合映射成可读名称比如(0, 8)是信标帧(1, 11)是 RTS(2, 0)是普通数据帧。输出按出现次数从多到少排列能快速看出抓到的包里哪种帧最多。如果信标帧占比特别高说明抓包位置离 AP 很近如果 RTS 帧很多说明网络里冲突比较严重站点频繁用 RTS/CTS 机制避免碰撞。提示tshark 在 Ubuntu 10.04 下抓包也需要 root 权限命令前加sudo。如果提示wlan.fc.type字段不存在说明 tshark 版本太老用tshark -G fields | grep wlan.fc查一下支持的字段名。从那以后我每次做 802.11 抓包分析都强制先跑一遍tshark -T fields把帧控制字段导出来用脚本统计完 type 和 subtype 分布再回到 Wireshark 里挑几个典型帧逐位对照。这样既不会漏掉异常帧也不会在几百个包里迷路。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。