解析一帧空中捕获的lorawan下行数据
1 下行样例数据
使用平台对CLASS-C模式的设备574a001600000001(deveui)下发两个字节0X00 0X1C,包类型为CONFIRMED。
使用SX1278来接收空中数据,射频参数必须匹配才行,C模式下默认使用505.3Mhz,速率、编码率、带宽、同步字、IQ极性都需要修改为相同的。
然后我们便能收到一帧数据
A0 EB055700 85 0900 0306FFFF01 02 BD80 EFEFB5A4
然后根据lorawan协议来分析
2 解析
F.png上图为一帧完整的通讯数据,但我们使用SX1278来接收时头尾都被硬件处理了,实际得到的数据是PHYPayload这块儿。
首先第一个字节是MHDR(0XA0),二进制表示为 1010 0000,则MType=101,RFU=000,Major=00。包类型101代表Confirmed Data Down。
接下来的4个字节是设备地址(0XEB 0X05 0X57 0X00),因为是小端存储所有设备地址为0X005705EB
下一个字节是FCtrl(0X85),二进制表示为1000 0101,ADR=1,RFU=0,ACK=0,FPending=0,FOptsLen=0101表示FOpts的长度
下两个字节是Fcnt(0X09,0X00),也因为是小端,所有实际计数值就是9
由FOptsLen可知接下来的5个字节都MAC命令,则FOpts(0X0306FFFF01),命令的第一个字节0X03表示CID=LinkADRReq,也就是请求终端改变数据率、传输功率、接收率或者信道。剩下四个字节类似参数,这里不说明了。
下一个字节是FPort(0x02)
余下的数据就是负载和MIC了,负载肯定是被加密了的(0XBD 0X80),因为FPort不等于0,则密匙便是APPSkey。MIC为(0XEF 0XEF 0XB5 0XA4)
至此便分析完成了该帧数据
3 工具解析
针对LORAWAN的协议解析在github上有个挺不错的工程lorawan-parser,虽然他的README有使用说明,我这里还是针对上面数据示例一下用该工具进行解析。
下载完成后,进入该目录,执行下列
sudo apt-get install autoconf libtool
cd lorawan-parser
autoreconf -i
./configure
make
然后在进入该文件加下的util/parser/目录,执行解析命令
./lwp --parse "A0 EB 05 57 00 85 09 00 03 06 FF FF 01 02 BD 80 EF EF B5 A4" --nwkskey c0be53e02476d2710d41709e4094915a --appskey 4702fbd8b09d9ef8a89061e314acf5a2 --appkey 1ead1ac44a9e01dd065513142e576698
得到解析结果
image.png