HackRF抓包私有LoRa协议参数分析

新发布LoRa协议HackRF one傅里叶
2026-07-16 11:51
6299

HackRF抓包私有LoRa协议参数分析

首先了解一下LoRa是什么, LoRa(Long Range 的缩写)是一种长距离、低功耗的无线通信技术。它是专为物联网(IoT)设备设计的,主要用于让散布在各地的传感器和智能设备进行长距离、低数据量的无线通信。它主要体现在大型城市基础设施,例如停车场,工业设备预测性维护,供应链资产管理,无线烟感与消防等方向,本次实验用到的方向是酒店系统的门锁管理。

简单的来说,LoRa(Long Range)是一种物理层调制技术,而私有LoRa协议LoRaWAN协议是构建在它之上的两种组网方案。它们的核心区别在于开放性和标准化程度

  • LoRaWAN(标准协议)
    采用标准的星型网络架构。终端节点不直接通信,所有数据必须经由网关转发至网络服务器,再由服务器分发给应用。管理由网络服务器(如ChirpStack、TTN)统一负责。
  • 私有LoRa协议
    网络拓扑完全自定,可以是点对点、星型或复杂的Mesh(网状网)中继。设备之间可以直接通信,或通过自己制定的规则组网,没有标准的网络服务器概念。

射频底层参数
这部分两者都是基于Semtech的LoRa芯片,参数名相同,但限制程度不同。

参数私有LoRa协议LoRaWAN协议
扩频因子(SF)完全自定义,常固定为SF12追求距离,或SF7追求速率。自适应数据速率(ADR),网络服务器会根据信号情况,动态指示节点调整SF。
带宽(BW)选择灵活,常用62.5kHz、125kHz、250kHz、500kHz等。严格限定,通常为125kHz、250kHz(部分地区用500kHz)。
编码率(CR)可自由选择4/5到4/8。在ADR控制下,通常是固定的4/5,以最大化效率。
发送功率可手动设为最大(如+20dBm),需自行注意法规。由网络服务器控制,节点必须遵守最大功率和功率调整指令。
频点与信道可手动设置任意频点,信道计划完全自定义。必须严格遵守对应地区的LoRaWAN信道计划(如CN470、EU868),信道是预定义的。

因此我们在分析私有LoRa协议的抓包过程中,看的最重要的底层射频参数的选择,只有发送端和接收端的关键参数匹配,接收端才能正确解调,我们也就能获取到数据包。
既然参数这么重要,我们可以使用我们的工具HackRF One,去获取到LoRa 设备的 IQ 文件,通过软件,对 IQ 文件进行分析,估算出私有协议的射频参数。

image-20260712152715834.png

软硬件设备准备

我们这个实验用到的硬件设备有:

  • LoRa网关
  • LoRa节点
  • HackRF One
  • 需要参数的LoRa抓包工具

软件设备有:

  • Gqrx:用于观察频谱/瀑布图,确认门锁发包时中心频率
  • HackRF 工具链:用于抓取 IQ 文件
  • Python:numpy / scipy / matplotlib依赖库

LoRa协议分层

LoRa协议分层架构如图

image-20260712174628562.png

私有 LoRa 协议分层

私有 LoRa 协议通常是厂商在 LoRa 物理层之上自行设计的一套通信协议。它没有固定的标准帧格式,具体字段、加密方式、校验逻辑和业务流程都由设备厂商决定。

应用层: 私有 LoRa 协议承载具体业务功能。例如在门锁系统中,应用层可能包括远程开锁、查询门锁状态、电量上报、设备绑定、网关管理等操作。这一层关注的是“业务要做什么”。

私有协议层: 厂商会定义自己的数据帧格式。常见字段可能包括设备 ID、命令字、序号、滚动码、时间戳、数据长度和业务载荷。

安全与校验层: 私有 LoRa 可能使用 CRC、校验和、MAC、滚动码、自定义加密或简单混淆。

模块控制层: 主控芯片通过串口或 SPI 配置 LoRa 模块,设置频率、带宽、扩频因子、编码率、发射功率、同步字等参数。这一层决定了设备能否和另一端“对上参数”。

LoRa PHY 物理层: 数据会被组织成空口帧,通常包含 Preamble、SyncWord、Header、Payload 和 CRC 等部分。随后通过 CSS Chirp 调制发送到空中。

LoRaWAN 协议分层

LoRaWAN 是建立在 LoRa 物理层之上的标准化广域网协议。它不仅规定无线调制方式,还规定了 MAC 帧格式、入网流程、密钥体系、设备类别、网关转发和网络服务器处理流程。

应用层: LoRaWAN 也承载业务数据,例如传感器数据、控制命令、状态上报等。但 LoRaWAN 的应用载荷通常由 AppSKey 加密,网络服务器一般只能转发和管理网络层信息,不能直接理解应用层明文内容。

LoRaWAN MAC 层: 协议字段是标准化的。典型字段包括 MHDR、FHDR、DevAddr、FCnt、FOpts、FPort 和 MIC。DevAddr 用于标识终端设备,FCnt 是帧计数器,可用于防止重放,MIC 用于完整性校验。相比私有 LoRa,LoRaWAN 的优势是结构清晰、标准统一,但分析时也必须遵循 LoRaWAN 的字段定义。

安全层: LoRaWAN 采用标准密钥体系。设备入网时会使用 AppKey,并派生出网络层和应用层相关密钥,例如 NwkSKey 和 AppSKey。网络层负责完整性校验和设备身份验证,应用层数据则通过应用密钥加密。

网络管理层: LoRaWAN 引入了网关和网络服务器。终端节点并不是直接和业务后台通信,而是先把 LoRa 空口数据发送给网关,再由网关转发到网络服务器。LoRaWAN 还定义了 Class A、Class B、Class C 三种设备类别,以及 ADR 自适应数据速率机制,用于在功耗、延迟和通信效率之间做权衡。

物理层: LoRaWAN 仍然使用 LoRa PHY。它同样依赖频率、BW、SF、CR、前导码等参数完成无线传输。因此从频谱或瀑布图上看,私有 LoRa 和 LoRaWAN 都可能表现为类似的 LoRa Chirp 信号。真正的区别需要在解调后的帧结构和上层协议字段中体现。

两者区别

私有 LoRa 和 LoRaWAN 的共同点是:二者底层都可以使用 LoRa 物理层调制,也就是通过 CSS Chirp 扩频方式在空口中传输数据。因此它们都依赖中心频率、带宽 BW、扩频因子 SF、编码率 CR、前导码、同步字等参数。只要这些物理层参数不匹配,接收端就无法正确解调数据包。

二者的主要区别在于上层协议是否标准化。私有 LoRa 是厂商基于 LoRa 物理层自行设计的通信协议,设备 ID、命令字、序号、滚动码、时间戳、载荷格式、校验方式和加密方式都由厂商自己定义。因此私有 LoRa 的灵活性较高,但协议兼容性、安全性和可分析性都取决于具体实现。

LoRaWAN 则是在 LoRa 物理层之上定义的一套标准化广域网协议。它规定了 MAC 帧格式、入网流程、设备地址、帧计数器、MIC 完整性校验、密钥体系、设备类别、网关转发和网络服务器处理流程。相比私有 LoRa,LoRaWAN 的结构更规范,安全机制更完整,也更适合大规模物联网网络部署。

从通信架构上看,私有 LoRa 通常是终端、网关或上位机之间的厂商私有通信,网关可能直接解析业务数据;LoRaWAN 则采用终端、网关、网络服务器、应用服务器的分层架构,网关主要负责转发,网络服务器负责 MAC 层管理和安全校验,应用服务器处理加密后的业务数据。

从安全角度看,私有 LoRa 的安全能力不固定,可能只是简单 CRC,也可能加入滚动码、时间戳、自定义加密或 MAC 校验;LoRaWAN 则使用标准密钥体系,例如 AppKey、NwkSKey、AppSKey,并通过帧计数器和 MIC 防止伪造与重放。

因此,私有 LoRa 可以概括为“厂商自定义协议 + LoRa 物理层”,LoRaWAN 可以概括为“标准化 MAC、安全和网络架构 + LoRa 物理层”。本实验分析的门锁通信属于私有 LoRa 场景,所以重点是先估算并匹配物理层参数,再进一步分析厂商自定义的数据帧、滚动码和校验逻辑。

私有LoRa设备工作流程

image-20260712165922359.png

抓取LoRa数据包并分析参数

本实验的目标是搭建一套完整的 LoRa 门锁通信环境,并在设备正常工作的基础上,对 LoRa 空口通信过程进行监听和参数分析。实验中主要包含 LoRa 网关、门锁节点、管理后台、小程序以及抓包分析设备等部分。

LoRa 网关接入网络

首先将 LoRa 网关接入实验网络环境。网关通过网线连接到路由器 LAN 口,使其能够访问互联网和厂商管理平台。网关上线后,后续才能通过网页后台或小程序对门锁设备进行绑定、管理和远程操作。

image-20260712181351303.png

该步骤的作用是让 LoRa 网关成为门锁节点和云端管理平台之间的中继设备。门锁节点本身通过 LoRa 与网关通信,网关再通过以太网或互联网与后台服务器通信。

在小程序端将网关和门锁节点绑定后,门锁节点、LoRa 网关和管理后台之间形成完整链路。门锁作为 LoRa 节点,负责接收开锁、查询状态等指令;网关负责转发门锁与平台之间的数据;后台则负责下发管理操作。在浏览器中打开管理后台地址,可以查看已绑定的门锁信息、网关状态以及可执行的管理操作。

点击后台中的远程开锁按钮,如果门锁发出开锁声音或状态发生变化,说明门锁节点、LoRa 网关、云端后台之间的通信链路已经搭建成功。此时设备已经具备正常 LoRa 通信条件。

LoRa 通信触发过程

当后台点击开锁、查询状态等操作时,后台服务器会先把控制指令发送给 LoRa 网关。网关收到指令后,将其封装成对应的私有 LoRa 数据帧,并通过 LoRa 空口发送给门锁节点。

门锁节点收到 LoRa 数据包后,会根据自身配置的频率、带宽、扩频因子、同步字等参数进行接收和解调。解调成功后,门锁会进一步校验设备 ID、命令字、滚动码、CRC/MAC 等字段。如果校验通过,则执行对应操作,例如开锁或状态上报;如果校验失败,则丢弃该数据包。

image-20260712232642370.png

使用 HackRF 观察空口信号并抓取iq文件进行参数分析

在后台触发开锁或查询操作时,同时使用 HackRF、Gqrx 或其他频谱观察工具查看 410 MHz 到 470 MHz 频段内是否出现 LoRa 信号。通过瀑布图中突然出现的高亮 Chirp 信号,可以初步判断设备的工作频段在435.804014 MHz附近。

image-20260712232708921.png

参数估算与抓包工具配置

使用 hackrf_transfer 工具对 LoRa 信号进行采集,抓取 IQ 数据的命令如下:

hackrf_transfer -r capture_436000_4m_lowgain.iq -f 436000000 -s 4000000 -a 1 -l 8 -g 8

其中,-r 用于指定保存的 IQ 文件名;-f 436000000 表示中心频率设置为 436 MHz;-s 4000000 表示采样率为 4 MS/s;-a 1 表示开启天线供电或相关射频配置;-l 8 表示 LNA 增益;-g 8 表示 VGA 增益。

获得 IQ 数据后首先要对数据进行解析,从真实电磁波到数字信号。这是 SDR 的起点。HackRF 的 ADC(模数转换器)将模拟射频信号采样并量化为交替存储的 8 位有符号 I/Q 数据。I 代表同相分量,Q 代表正交分量。二者结合成一个复数 I + jQ,能够保留后续基带处理所需的瞬时幅度和相位信息,这是后续频谱分析、时频分析和解调处理的基础。

raw = np.fromfile("capture_436000_4m_lowgain.iq", dtype=np.int8)  #把 .iq 文件里的每个字节按顺序读到内存,按 int8 的规则翻译成 -128 到 127 之间的一个数,把所有数字装进一个叫 raw 的 NumPy 数组缓冲区里
raw = raw[:(raw.size // 2) * 2]                                   #对 raw 这个数组本身做一个微调,确保它的长度是偶数,然后把调整后的结果重新赋值给 raw,因为 IQ 数据是成对出现的:一个 I 必须搭配一个 Q。如果文件里总共有奇数个数字,说明最后一个 Q 或者 I 丢失了。在下一个步骤分离 I/Q 时,用 raw[0::2] 和 raw[1::2] 要求两路长度一致,否则会报错。
x = raw[0::2].astype(np.float32) / 128.0 \
  + 1j * raw[1::2].astype(np.float32) / 128.0  #将数据内的I/Q分离,从索引0开始,每隔两个取一个,取出偶数位置的元素I,从索引I开始,每隔两个取出一个,取出奇数位置的索引元素Q,再将这些整数转成32位浮点数确保精度,因为后续所有信号处理算法,都需要在 -1.0 到 1.0 之间的标准浮点数,所以需要`/128.0`,让信号从“原始 ADC 整数”变成“算法可用的标准浮点信号”。这样即防止计算溢出,与物理意义解耦,也是算法库的通用约定。最后再用 I + 1j * Q 合成复数信号,赋给变量 x,它就是最终可以用来做 FFT、频谱分析、解调的信号。

由此,我们完成了对 LoRa IQ 数据的解析和预处理。

频谱分析

1. 找信号最强的一段时间窗口

def pick_strong_window(x: np.ndarray, fs: float, block_ms: float, window_s: float):  #x 就是我们之前解析出来的信号 fs 就是采样率4MHz block_ms 控制检测粒度 window_s 决定最终取多长一段给后续频谱分析用。
    block_size = int(fs * block_ms / 1000.0)   #把信号切成小块
    nblocks = len(x) // blo

试读结束,发布七天后转为公开

公开时间:2026年7月23日 11:51:08

提前解锁全文,需花费 50 积分

登录解锁全文
分享到

参与评论

0 / 200

全部评论 0

暂无人评论
投稿
签到
联系我们
关于我们