浏览器本地 CSI 抓包质量检查器(GL-MT6000 / mt76)

作者 Wu Jun · 更新于 2026-11-02 · 约 6 分钟

先判断抓包文件本身是否可分析,再决定是否投入时间做清洗、频谱或机器学习。 这个工具只解析本项目公开格式 double timestamp + uint16 length + mt76 CSI payload, 所有 CSI 数据都在当前浏览器标签页内处理,不会上传到服务器 [1] [2]。

本地解析,不上传 CSI 文件;发送端 MAC 只计数,不写入报告。

选择抓包文件后开始本地检查。

它检查什么

检查层 结果 说明
文件分帧 外层 10 字节记录头、payload 长度、尾部截断 发现错位或文件没写完
闭合测量组 chain_info bit 15 统计完整组、尾部未闭合记录和每组链记录数
链一致性 Tx/Rx 组合与众数 区分“完整 2×4 组”和缺链组,不把数组下标当物理天线证明
子载波 data_num 分布 识别 256 子载波组与异常切换
时间连续性 组起始间隔、p50、p95、最大值 找出 >1 秒、>5 秒空档和倒序时间
I/Q payload 字节数与是否全零 发现长度不符或没有有效 CSI 数值的记录

判读规则

阈值是快速筛查基线,不是 IEEE 标准,也不是对算法精度的保证。正式实验仍应记录固件、驱动、信道、带宽、 采样命令、盘剩余空间和 daemon 内存;需要更完整的统计时,再运行 Python 质量审计。

得到结果之后怎么处理

不要看到“复核”就立刻删文件,也不要看到“通过”就直接训练模型。先按下表把问题放回采集链:

结果 先核对什么 不建议怎么做
外层分帧失败 文件是否由本项目 csi_capture 脚本生成;10 字节外层头、长度字段、传输过程是否截断;生成器版本是否一致 手工改长度或把其他格式直接当成本容器解析
没有闭合测量组 chain_info bit15、frame-type/MAC 过滤、客户端是否持续产生流量、接口名与 daemon 日志 直接归因于天线损坏或固件完全不支持
链组覆盖不足 每组实际 Tx×Rx 组合、chain_info、固件与天线配置;缺链是否集中在固定链 静默补零、复制其他链,或把数组下标当成物理天线证明
子载波数量混用 采集期间是否切换 20/40/80MHz、RU、客户端带宽或信道配置;不同配置是否被拼进同一文件 把 64、256 等不同形状的记录直接拼成矩阵
时间空档超线 同一时间窗的 daemon 日志、AP/客户端计数、抓包端丢包与磁盘停顿;是否本来就没有触发 CSI 上报 仅凭文件空档断言 UDP 丢包,或直接伪造均匀时间轴
I/Q 为空或长度不符 payload 头中的 data_num、实际字节数、字节序、写入是否完整;目标流量是否真正命中过滤条件 把全零或短 payload 补成可分析矩阵后继续比较算法
全部通过 保存固件、驱动、信道、带宽、采样命令、文件 SHA-256 和报告;再做独立 session 验证 把容器通过解释成人体检测、定位或模型准确率已经成立

这张表只处理“文件与采集链是否可用于下一步”,不评价分类器或感知任务的科学有效性。 如果结果需要提交给维护者,请附导出的 JSON/Markdown 报告、相关日志和最小复现步骤; 原始抓包可能仍含未脱敏 MAC 和绝对时间,分享前应使用 数据脱敏流程。

重要边界:空档不等于“网络丢包”

UDP 抓包文件只能证明“这段时间没有写入闭合测量组”。原因可能是网络丢包、接收程序来不及落盘, 也可能是路由器端没有触发 CSI 上报、过滤条件没有命中合法帧,或采集 daemon 已经停止。 除非同时保存了 daemon 日志、网卡计数与抓包端丢包计数,否则不能把单个时间空档归咎为某一种原因。

同样,未闭合尾组常常只是停止采集时恰好截断;它应被隔离,不应被静默补零。这个失败模式与 Python 审计脚本的口径一致,便于网页快速检查和离线复算互相对照。

数据格式与复现

网页解析的是第三方分析机侧文件:

repeated:
  float64 host_timestamp
  uint16  payload_length
  payload_length bytes:
    24-byte little-endian mt76 CSI header
    int16 I/Q pairs

该格式来自 csi_capture.py 与 csi_capture_linux.sh,payload 头定义沿用 mt76 CSI 上报结构; 本项目工具包公开了脚本、格式说明与真机回环测试 [1] [3]。 想先验证网页行为,可点击上方“加载公开 60 秒样本”。预期结果是 2,777 条记录、347 个完整组、256 子载波、8 条链/组和 1 条尾部残片。

也可以下载同一个脱敏文件后用 Python 复算:

隐私说明

CSI 原始文件本身会被当前页面读取,但不会通过表单、fetch 或分析接口上传。页面只加载站点原有的 JavaScript、样式、字体与广告脚本;这些常规页面请求不应包含你选择的文件内容。导出的报告默认不包含 发送端 MAC,只保留发送端数量。浏览器扩展、恶意脚本或设备被控制时,任何本地处理都不等于绝对安全, 因此仍应在可信设备上处理未脱敏抓包。

参考与数据来源

本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。

  1. E 级 · 本项目实测 Router CSI Toolkit — 采集/分析/守护脚本(MIT,公开仓库)
    Router CSI Lab · 2026
    github.com/jjjwu/router-csi-toolkit · 核实: GitHub API 于 2026-11-02 核实公开仓库、抓包质量预检、成功 CI 与 v0.1.3 Release;归档 SHA-256 为 59f144c0…adea7 · 公开版含无第三方依赖的抓包质量预检;网页端检查器使用同一容器定义和边界口径。
  2. E 级 · 本项目实测 Router CSI Lab — GL-MT6000 (MT7986) Wi-Fi CSI dataset, 10 s sample + 10 min capture
    Router CSI Lab · 2026
    doi:10.5281/zenodo.23434789 · 核实: CC BY 4.0;SHA-256 已发布;Zenodo DOI 10.5281/zenodo.23434789 · 数据集已获 Zenodo DOI(10.5281/zenodo.23434789),可直接引用。
  3. C 级 · 官方资料 openwrt/mt76 — mac80211 driver for MediaTek Wi-Fi chipsets
    OpenWrt project / MediaTek
    github.com/openwrt/mt76 · 核实: GitHub API 2026-10-11 (stars 890, last push 2026-10-08) · 本项目使用的开源 mt76 驱动上游;CSI 能力的补丁正是在这一代码库之上编排。