简介这份PDF实验报告面向学习无线网络与802.11协议的高校学生及网络技术初学者围绕Wireshark抓包分析展开帮助读者理解802.11帧格式与MAC层通信原理。资源包共1个文件为537KB的PDF文档内容完整呈现实验目的、环境搭建、抓包步骤与结果分析便于直接阅读与对照学习。报告以Ubuntu与Wireshark为实验平台逐位解析数据帧、RTS控制帧与信标管理帧的帧控制字段涵盖To DS、From DS、retry、powermgt、protected等标志位含义并说明大端模式下的解读方法还包含实验总结与教师评语。目前已有400人学习适合作为无线网络课程实验参考、抓包分析入门练习及协议字段查阅材料帮助读者建立对802.11帧结构的直观认识。1. 无线局域网抓包实验从 802.11 帧到可复现的排障链路很多人第一次做无线局域网抓包实验都会卡在同一个地方Wireshark 里能看到一堆 802.11 帧但看不懂、过滤不出来、更别说定位问题。有线抓包你插上网线就能看到完整以太网帧无线这边却要先解决网卡监听、信道锁定、加密帧解密三件事任何一环没打通抓到的包都是废数据。这篇笔记就围绕「无线局域网抓包实验」这个主题把 802.11 帧格式、抓包环境搭建、过滤表达式、解密配置和常见翻车点讲清楚目标是你照着做完能独立抓一次完整的关联认证数据交互过程并读懂每一类管理帧在说什么。适合做网络排障、物联网设备调试、无线安全入门以及被「抓不到包」折磨过的同学。2. 802.11 帧格式与抓包原理为什么无线抓包和有线完全不是一回事2.1 802.11 帧的三段结构与类型字段802.11 帧和以太网帧最大的区别在于头部长度不固定且地址字段数量随帧类型变化。一个标准 802.11 帧由三部分组成Frame Control2 字节、Duration/ID2 字节、Address 1~4各 6 字节数量视类型而定、Sequence Control2 字节、QoS Control2 字节仅 QoS 数据帧有、Frame Body变长、FCS4 字节校验。Frame Control 里的 Type 和 Subtype 两个字段决定了这个帧是管理帧、控制帧还是数据帧。管理帧Type0负责建立和维护链路包括 Beacon、Probe Request/Response、Authentication、Association Request/Response、Deauthentication 等。控制帧Type1负责信道协调典型的是 RTS、CTS、ACK。数据帧Type2承载上层载荷。做抓包实验时你最先要能区分的就是这三类因为它们的分析思路完全不同管理帧看流程是否完整控制帧看信道竞争是否激烈数据帧看上层协议是否正常。地址字段是另一个容易懵的点。802.11 帧最多有四个地址含义取决于 To DS 和 From DS 两个标志位。在基础设施模式下Address 1 通常是接收方RAAddress 2 是发送方TAAddress 3 是最终目的或源地址。如果你用 Wireshark 过滤wlan.addr xx:xx:xx:xx:xx:xx它会匹配任意一个地址字段而wlan.ta和wlan.ra则精确匹配发送和接收地址。搞清楚这个后面过滤才不会漏包或误判。2.2 监听模式与信道锁定抓包前的两个硬前提无线网卡默认工作在管理模式Managed只接收发给自己的帧。要抓空口上所有帧必须把网卡切到监听模式Monitor Mode。Linux 下用iw或airmon-ngWindows 下则依赖网卡驱动是否支持 Npcap 的监听模式。不是所有网卡都支持监听常见的支持芯片包括 Atheros AR9271、Realtek RTL8812AU/RTL8812BU、Intel AX210 等。如果你用的是笔记本内置网卡大概率抓不到完整的 802.11 管理帧这是第一个血泪经验。切到监听模式后第二个前提是锁定信道。无线信道是分时复用的网卡在同一时刻只能监听一个信道。如果你不锁定信道抓包过程中设备可能漫游到其他信道你会丢失大量帧。命令上Linux 用iw dev wlan0 set channel 6配合iw dev wlan0 interface add mon0 type monitor创建监听接口。Wireshark 里也可以在捕获选项的监控模式设置中指定信道。做实验时建议先固定一个信道把目标设备也固定到同一信道避免跳频带来的丢包。提示监听模式下网卡不再关联任何 AP所以你不能同时用它上网。抓包和上网需要两块网卡或者抓完再切回管理模式。2.3 用 Wireshark 跑通第一次无线抓包的最小步骤下面是一套在 Linux 下可复现的最小流程假设你有一块支持监听模式的 USB 网卡接口名为 wlan1。# 1. 查看网卡是否支持监听模式 iw list | grep -A 10 Supported interface modes # 2. 关闭可能干扰的网络管理进程 sudo airmon-ng check kill # 3. 创建监听接口 mon0 sudo iw dev wlan1 interface add mon0 type monitor # 4. 启用监听接口 sudo ip link set mon0 up # 5. 锁定信道 62.4GHz 常用信道 sudo iw dev mon0 set channel 6 # 6. 确认接口状态 iw dev mon0 info执行完这几步后打开 Wireshark选择 mon0 接口开始捕获。如果一切正常你应该能看到大量 Beacon 帧间隔约 100ms来自周围所有 AP。这时候在显示过滤器里输入wlan.fc.type 0只看管理帧再输入wlan.fc.subtype 8只看 Beacon。Beacon 帧里包含 SSID、支持速率、信道信息等是判断 AP 配置最直接的依据。参数说明airmon-ng check kill会杀掉 NetworkManager、wpa_supplicant 等进程防止它们干扰监听接口。如果你只是临时实验抓完可以用sudo systemctl restart NetworkManager恢复。iw dev mon0 set channel 6里的信道号要根据目标 AP 实际使用的信道来改2.4GHz 常用 1、6、115GHz 信道号更大需要网卡支持对应频段。3. 过滤表达式与解密配置把抓到的帧变成能读懂的数据3.1 常用显示过滤器从几百个帧里捞出你要的那几条抓包容易过滤难。空口上每秒可能有上千个帧不做过滤根本没法分析。Wireshark 的显示过滤器语法针对 802.11 有一套专门的字段下面这张表是我做实验时最常用的几条建议直接抄进你的过滤器书签。过滤目标表达式说明只看管理帧wlan.fc.type 0排除数据和控制帧干扰只看 Beaconwlan.fc.type_subtype 0x08查看周围 AP 信息只看认证帧wlan.fc.type_subtype 0x0b分析认证流程只看关联请求wlan.fc.type_subtype 0x00查看设备接入请求按发送地址过滤wlan.ta xx:xx:xx:xx:xx:xx精确匹配某个设备发出的帧按 SSID 过滤wlan.ssid MyWiFi只看指定网络只看重传帧wlan.fc.retry 1排查链路质量问题只看保护帧wlan.fc.protected 1判断是否加密这里有个容易踩的坑wlan.fc.type_subtype的值是十六进制组合Type 占 2 位、Subtype 占 4 位。比如 Beacon 是 Type0、Subtype8组合起来就是 0x08认证帧是 Type0、Subtype11即 0x0b。很多人直接写wlan.fc.subtype 8在部分 Wireshark 版本里也能用但跨版本兼容性不如type_subtype稳定。3.2 解密 WPA2 数据帧拿到 PSK 和握手包之后怎么做默认情况下WPA2 加密的数据帧在 Wireshark 里显示为 802.11 数据帧Frame Body 是加密的看不到上层 IP 和 TCP。要解密你需要两样东西完整的四次握手包EAPOL 帧和网络的预共享密钥PSK。Wireshark 的解密逻辑是用握手包里的随机数和 PSK 推导出会话密钥然后解密后续数据帧。配置路径在 Wireshark 的 Preferences → Protocols → IEEE 802.11 → Decryption Keys。点击 Edit添加一条 key类型选 wpa-pwd值填你的WiFi密码:SSID比如mypassword:MyWiFi。注意格式是密码冒号 SSID冒号不能少。填完之后如果抓包文件里包含完整的四次握手Wireshark 会自动解密后续数据帧你就能看到 ARP、DHCP、TCP 等上层协议了。但这里有个硬条件四次握手必须完整。如果你只抓到部分 EAPOL 帧解密会失败。判断方法是在过滤器里输入eapol看是否有 4 条消息Message 1~4。如果只有 2 条说明握手不完整需要重新抓。另外如果目标网络启用了 802.11w管理帧保护PMF部分管理帧也会被加密这时候连 Deauth 帧都看不懂需要额外配置。# 用 tshark 命令行验证握手包是否完整 tshark -r capture.pcap -Y eapol -T fields -e eapol.type # 输出示例0 1 0 1 表示握手消息类型 # 完整的四次握手应包含 type 0Message 1、1Message 2、0Message 3、1Message 4这段命令的作用是快速检查抓包文件里 EAPOL 帧的数量和类型。-Y是显示过滤器-T fields -e eapol.type只输出 EAPOL 类型字段。如果输出少于 4 个值基本可以判定握手不完整解密无望别浪费时间。3.3 用 tshark 批量提取 802.11 关键字段做统计分析Wireshark 图形界面适合逐帧分析但做实验报告或批量统计时tshark 更高效。下面这段命令把抓包文件里所有管理帧的发送地址、子类型、SSID 提取成 CSV方便你用 Excel 或 Python 做进一步统计。tshark -r wireless.pcap \ -Y wlan.fc.type 0 \ -T fields \ -e wlan.ta \ -e wlan.fc.type_subtype \ -e wlan.ssid \ -E separator, \ -E headery management_frames.csv参数说明-r指定输入文件-Y是显示过滤器-T fields表示按字段输出-e指定要提取的字段-E separator,设置 CSV 分隔符-E headery输出表头。跑完之后你会得到一个包含所有管理帧关键信息的表格可以快速统计哪个设备发 Beacon 最频繁、哪个 SSID 出现次数最多、关联请求集中在哪个时间段。注意wlan.ssid字段只在包含 SSID 的帧里存在比如 Beacon 和 Probe Response。关联请求里通常没有 SSID 字段提取出来是空的这是正常现象不要以为是命令写错了。4. 避坑与排查无线抓包实验里最容易翻车的 5 个地方4.1 抓不到任何 802.11 管理帧现象Wireshark 里只看到零星几个帧或者干脆空白但网卡明明已经切到监听模式。原因最常见的是网卡驱动不支持监听模式或者监听接口没有正确创建。Windows 下很多内置网卡只支持 Npcap 的「监控模式」但实际抓不到管理帧这是驱动层面的限制不是 Wireshark 配置问题。另一个原因是信道没锁定网卡在跳频导致每个信道只抓到一小段。解决先用iw list确认网卡支持 monitor 模式。如果不支持换一块已知支持的 USB 网卡Atheros AR9271 或 Realtek RTL8812AU 系列。如果支持检查监听接口是否真的 up用iw dev mon0 info看 type 是否为 monitor。最后锁定信道确保目标 AP 和抓包网卡在同一信道。4.2 解密失败数据帧全是加密的现象配置了 wpa-pwd 密钥但数据帧依然显示为加密看不到 IP 层。原因三种可能。一是四次握手不完整缺少 Message 2 或 Message 3二是密码或 SSID 填错注意 SSID 区分大小写三是抓包时目标设备已经完成握手你只抓到了后续数据帧没有抓到握手过程。解决重新抓包确保抓包开始时间早于设备连接时间。可以先让设备断开 WiFi开始抓包再让设备重新连接这样能完整捕获四次握手。抓完后用eapol过滤器确认有 4 条消息。如果还是不行检查 Wireshark 版本老版本对 WPA3 的支持不完整WPA3 网络需要额外配置 SAE 握手解析。4.3 过滤表达式报错或匹配不到现象输入wlan.fc.type_subtype 8后 Wireshark 提示语法错误或者过滤结果为空。原因不同 Wireshark 版本对 802.11 字段的命名有差异。老版本用wlan.fc.subtype新版本推荐wlan.fc.type_subtype。另外十六进制值不加0x前缀在某些版本里会被当成十进制导致匹配错误。解决统一用wlan.fc.type_subtype 0x08这种带0x的写法。如果还不确定在 Wireshark 里展开一个帧的详细信息找到对应字段右键选择「作为过滤器应用」它会自动生成正确的表达式你照着抄就行。4.4 抓到的包时间戳混乱或丢包严重现象抓包文件里帧的时间间隔忽大忽小或者明明设备在传输数据却只抓到少量帧。原因监听模式下网卡不发送 ACK空口上的重传和信道竞争会导致丢包。另外如果抓包时 CPU 占用过高Wireshark 的捕获缓冲区可能溢出导致丢帧。USB 网卡还受 USB 带宽限制高流量场景下丢包更明显。解决增大 Wireshark 的捕获缓冲区Capture Options → Buffer size建议设到 64MB 以上。关闭其他占用 CPU 的程序。如果还是丢包用dumpcap命令行抓包它比 Wireshark 图形界面更轻量。命令示例dumpcap -i mon0 -b filesize:102400 -w capture.pcapng-b filesize设置文件滚动大小避免单个文件过大。4.5 5GHz 频段抓不到包现象2.4GHz 抓包正常切换到 5GHz 后什么都抓不到。原因不是所有支持监听模式的网卡都支持 5GHz 监听。部分老款网卡只支持 2.4GHz。另外5GHz 信道号更大iw dev mon0 set channel 36需要网卡固件支持对应频段。解决先用iw phy查看网卡支持的频段和信道列表。如果只列出 2.4GHz 信道说明硬件不支持 5GHz 监听换网卡。如果支持确认信道号写对5GHz 常用信道包括 36、40、44、48、149、153、157、161。设置后用iw dev mon0 info确认当前信道已生效。5. 进阶技巧用 Python PyShark 做自动化无线帧分析如果你已经能手动抓包和过滤下一步大概率是想把重复性的分析自动化。PyShark 是 tshark 的 Python 封装能直接读取 pcap 文件并按字段提取数据。但这里有个经典坑PyShark 依赖 tshark 可执行文件如果系统里没装或路径不对会直接报错。另外PyShark 本身不负责抓包它只做解析抓包还是得靠 dumpcap 或 tshark。下面这段脚本读取一个无线抓包文件统计每个发送地址的管理帧数量并输出 Beacon 帧的 SSID 列表。import pyshark from collections import Counter # 指定 tshark 路径Windows 下需要Linux 通常自动找到 # pyshark.tshark.tshark_path rC:\Program Files\Wireshark\tshark.exe cap pyshark.FileCapture( wireless.pcap, display_filterwlan.fc.type 0, keep_packetsFalse # 不保留原始包降低内存占用 ) ta_counter Counter() ssid_set set() for pkt in cap: try: # 统计发送地址 if hasattr(pkt.wlan, ta): ta_counter[pkt.wlan.ta] 1 # 收集 Beacon 帧里的 SSID if hasattr(pkt.wlan, ssid): ssid_set.add(pkt.wlan.ssid) except AttributeError: # 部分帧缺少 wlan 层字段跳过 continue cap.close() print(管理帧发送地址 TOP 5:) for addr, count in ta_counter.most_common(5): print(f {addr}: {count}) print(\n发现的 SSID:) for ssid in sorted(ssid_set): print(f {ssid})逻辑说明FileCapture的display_filter参数在解析阶段就过滤掉非管理帧减少内存和 CPU 开销。keep_packetsFalse让 PyShark 不缓存原始包处理大文件时避免内存爆掉。循环里用hasattr判断字段是否存在因为不是所有管理帧都有 SSID 或 TA 字段直接访问会抛异常。Counter做频次统计most_common(5)取前五。参数说明display_filter的语法和 Wireshark 显示过滤器完全一致你可以换成wlan.fc.type_subtype 0x08只看 Beacon。如果抓包文件很大建议先用editcap按时间或包数切分再分批喂给 PyShark。editcap -c 10000 wireless.pcap split.pcap每 10000 个包切一个文件。最后一个我踩过的坑PyShark 在 Python 2.7 下安装经常失败因为依赖的 lxml 版本不兼容。如果你还在用 Python 2.7建议直接升级到 Python 3.8 以上PyShark 对 Python 3 的支持稳定得多。另外Windows 下如果报tshark not found显式设置tshark_path指向 Wireshark 安装目录下的 tshark.exe别指望它自动找到。做无线抓包实验最省时间的习惯是每次抓包前先确认三件事——网卡在监听模式、信道已锁定、抓包文件有足够缓冲区。这三步花不了一分钟但能省掉后面半小时的排查。希望帮到你。本文还有配套的精品资源点击获取
