本文资料采集于http://www.cnblogs.com/answerinthewind/category/925777.html:
总体架构一共分为4部分:
LoRaWAN从底层到最后用户拿到数据的通讯过程通讯大致可分为三段:
1. MOTE <---> GW (MAC层)
2. GW <---> server
3. server <---> 用户
LoRa联盟 规定了 MAC层的通讯协议,只有在设备(GW、MOTE)共同遵守的MAC层协议的前提下,不同硬件厂商的设备才能互相接入。
而GW <---> Server以及Server <---> 用户这两层的协议虽然LoRa联盟有所规范,但不同厂商之间可能会存在不同。
Mote/Node 就是节点,在LoRaWAN中,节点一般与传感器连接,负责的就是收集传感数据,然后通过LoRaMAC 协议传输给Gateway。
Gateway也就是网关,主要负责将节点的数据传输给服务器,也就是完成数据从LoRa方式到网络方式的转换,其中Gateway并不对数据做处理,只是负责将数据打包封装,然后传输给server(服务器)。
按照LoRaWAN的规定,Server又分为四部分--NS(Network server)、AS(Application server)、CS(Customer server)、NC(Network controller)
其中每个部分的分工和职能各不相同。相应的我会在后续的文章中讲到。
用户一般只的是直观使用这个数据的人,一般是APP或者其他客户端方式,从服务器获取数据。
在这里我以LoRaWAN 方式实现农场的土壤湿度检测来具体说明这各个部分的区别:
实现农场的土壤湿度的检测主要分为几个步骤:
· 实现传感器采集土壤湿度(sensor层)
· 将采集到的土壤湿度通过MOTE发送给GW(LoRaMac 层)
· GW将收到的数据发送给NS(GW<--->Server)
· NS再将数据发送给用户(Server<--->Customer)
· 用户通过APP或者其他方式可以看到土壤的湿度状态。(Display)
通过以上的几个步骤,就可以实现远程监控农场土壤湿度。
上行:终端的数据发送经过一个或多个网关中转到达网络服务器。
下行:由网络服务器发送给终端设备,每条消息对应的终端设备是唯一确定的,而且只通过一个网关中转。
LoRaWAN Classes 一共分为3类:Class A,Class B,Class C
Class A:终端先发送,在发送后开启一段时间的接收窗口,终端只有在发送后才可以接收。也就是说上行没有限制,下行的数据只有在上行包发送上来的时候终端才可以接收到。(功耗最低)
Class B:终端和服务器协商好接收的窗口开启的时间以及何时开启,然后再约定的时间进行接收,可以一次接收多个包。(功耗次低)
Class C:终端在发送以外的其他时间都开启接收窗口。更耗能,但通讯延时最低。(功耗最高)
总的数据包结构:
注意preamble、PHDR、PHDR_CRC、CRC都是硬件生成,无需软件参与,需要软件参与的就是PHYPayload部分
上行链路消息:
下行链路消息:
其中上行最后还有CRC校验,而下行没有CRC校验。其中PHDR PHDR_CRC CRC都是射频芯片用于校准数据的完整新和一致性用的,并非用户生成的数据。
由上图可以看到,MAC数据是是作为PHYPayload存在的
其中MAC 层的包有三个部分组成:
· MHDR(MAC层帧头)
· MACPayload(MAC层负载)
· MIC(4字节的校验)
而MACPayload又由三个部分组成:
· FHDR (MAC层负载头)
· FPORT(MAC 层数据的通道号)
· FRMPayload(MAC层负载,加密)
而FHDR又由由四个部分组成:
· DevAddr(终端的ID 4字节)
· FCtrl(帧的控制字 1个字节)
· FCnt (帧的序号 2个字节)
· FOpts(帧配置,字节数不定,大部分情况0个字节)
所以,由协议可知,一个上行包或者下行包中的数据内容有哪些,抛开控制命令不说,主要有终端的ID、包的序号、用户的加密负载。
例如我抓到的一个数据包:
\x40 \x7f \xf8 \x8a \x29 \x80 \x2a \x00 \x02 \x07 \x42 \x87 \x3f \xc7 \xb4 \x22 \x04 \x00 \x84 \x8d \x1b \x06 \x2f \x5b \xbc \x57 \xdb \xf2 \x31 \xde \x49 \x61 \x00 \x86 \x99 \xec \x08 \x61 \xf0 \xb7 \xda \x54 \x0a \xfa \xd1 \x31 \xac \xd0 \x44 \x1b \x4d \xfa \x48 \x77 \x19 \xee \x61 \x14 \xbf \x23 \x52 \xd1 \xe9 \x93 \x79 \x6e \x16 \xd7 \x13 \x2e \x58 \x06 \x54 \xc3 \xd2 \x04 \xba \x52 \xa7 \xc8 \x7a \x0b \x8e
这是一个MAC 层的帧,即完整的PHYPayload部分,注意,默认LoRaWAN都是按小端方式传输的。
其中
· MHDR:
\x40
· MACPayload-FHDR-DevAddr:
\x7f \xf8 \x8a \x29
· MACPayload-FHDR-FCtrl:
\x80
· MACPayload-FHDR-FCnt:
\x2a \x00
· MACPayload-FPORT:
\x02
· MACPayload-FRMPayload(加密):
\x07 \x42 \x87 \x3f \xc7 \xb4 \x22 \x04 \x00 \x84 \x8d \x1b \x06 \x2f \x5b \xbc \x57 \xdb \xf2 \x31 \xde \x49 \x61 \x00 \x86 \x99 \xec \x08 \x61 \xf0 \xb7 \xda \x54 \x0a \xfa \xd1 \x31 \xac \xd0 \x44 \x1b \x4d \xfa \x48 \x77 \x19 \xee \x61 \x14 \xbf \x23 \x52 \xd1 \xe9 \x93 \x79 \x6e \x16 \xd7 \x13 \x2e \x58 \x06 \x54 \xc3 \xd2 \x04 \xba \x52 \xa7
· MIC:
\xc8 \x7a \x0b \x8e
LoRaWAN 的server包括 NS(Network server)、AS(application server)、CS(Custom server)....
其中NS和AS是比不可少的,是完成LoRaWAN协议的重要组成部分
NS是直接与GW通信的服务器,也是AS和GW之间的桥梁
我所知道的工作有如下几点:
1. 验证数据的合法性(校验MIC)
2. 从GW的信息中提取数据,整理成NS 的JSON数据包
3. 将校验合法的数据打包成新的JSON包上传至AS
4. OTAA入网时向AS发送请求入网消息,然后再将入网信息告诉AS,当获取AS传来的入网的信息,告诉GW
5. GW 和 AS之间的数据通道
有几点需要注意的是NS端的数据不进行AES解密工作。
AS是server端的数据处理中心
它的工作有如下几点:
1. 上行数据的解密
2. 下行数据的加密
3. OTAA入网请求的处理(同意入网/生成APPSKEY/NWKSKEY)
CS负责将AS给的数据处理成用户自定义的数据协议格式,也就是说,CS端必须是用户来完成的,因为上面运行的是用户的协议。这里也就不再多说了。
以下是我在本地服务器端通过抓到得来的数据,我们通过分析数据包来理解数据的走向已及现有的server端处理流程。抓包使用的是tcpdump。
1.NS->AS数据
这是一帧从NS->AS的数据,使用的是TCP方式,AS的数据端口为4000。从data部分我们可以看出来,这是一个未解密的数据。
15:30:53.662471 IP localhost.60795 > localhost.4000: Flags [P.], seq 13:328, ack 14, win 442, options [nop,nop,TS val 414153 ecr 414145], length 315
0x0000: 4500 016f aee3 4000 4006 8ca3 7f00 0001
0x0010: 7f00 0001 ed7b 0fa0 5505 b988 2261 4f1b
0x0020: 8018 01ba ff63 0000 0101 080a 0006 51c9
0x0030: 0006 51c1 7b22 6170 7022 3a7b 226d 6f74
0x0040: 6565 7569 223a 2234 6137 3730 3032 3031
0x0050: 3631 3031 3622 2c22 6469 7222 3a22 7570
0x0060: 222c 2273 6571 6e6f 223a 3532 332c 2275
0x0070: 7365 7264 6174 6122 3a7b 2270 6f72 7422
0x0080: 3a32 2c22 7061 796c 6f61 6422 3a22 5645
0x0090: 7666 6f56 2b72 6631 5838 4177 316e 6c52
0x00a0: 7077 227d 2c22 6d6f 7465 7478 223a 7b22
0x00b0: 6672 6571 223a 3437 312e 352c 2264 6174
0x00c0: 7222 3a22 5346 3132 4257 3132 3522 2c22
0x00d0: 636f 6472 223a 2234 2f35 222c 2261 6472
0x00e0: 223a 6661 6c73 657d 2c22 6777 7278 223a
0x00f0: 5b7b 2265 7569 223a 2266 6666 6562 3832
0x0100: 3765 6266 3231 6130 3722 2c22 7469 6d65
0x0110: 223a 2232 3031 362d 3131 2d32 3454 3135
0x0120: 3a33 303a 3533 5a22 2c22 7469 6d65 6672
0x0130: 6f6d 6761 7465 7761 7922 3a66 616c 7365
0x0140: 2c22 6368 616e 223a 342c 2272 6663 6822
0x0150: 3a30 2c22 7273 7369 223a 2d37 392c 226c
0x0160: 736e 7222 3a2d 3136 2e35 7d5d 7d7d 00
提取其中的数据部分为:
{
"app": {
"moteeui": "4a770020161016",
"dir": "up",
"seqno": 523,
"userdata": {
"port": 2,
"payload": "VEvfoV+rf1X8Aw1nlRpw"
},
"motetx": {
"freq": 471.5,
"datr": "SF12BW125",
"codr": "4/5",
"adr": false
},
"gwrx": [
{
"eui": "fffeb827ebf21a07",
"time": "2016-11-24T15:30:53Z",
"timefromgateway": false,
"chan": 4,
"rfch": 0,
"rssi": -79,
"lsnr": -16.5
}
]
}
}
再把app.userdata.payload 做base64解码之后,得到的payload内容是这个:
app.userdata.payload base64 decoded:
\x54 \x4b \xdf \xa1 \x5f \xab \x7f \x55
\xfc \x03 \x0d \x67 \x95 \x1a \x70
此时看到的payload因为是加密的,所以完全看不出来数据内容是什么。
不过在这里,我们可以看到,NS已经将GW上传的数据做了一定的解析,封装成了另外一种JSON格式,由此,我们不难得出,NS做的工作包括--base64解码/MIC校验/GW数据包的重新组包
2.AS->CS数据
这是一帧从AS->CS的数据,使用的是TCP方式,CS的数据端口为5000。从data部分我们可以看出来,这是一个已经解密完成的数据了。
15:30:53.663219 IP localhost.36774 > localhost.5000: Flags [P.], seq 13:328, ack 13, win 342, options [nop,nop,TS val 414153 ecr 414140], length 315
0x0000: 4500 016f 928b 4000 4006 a8fb 7f00 0001
0x0010: 7f00 0001 8fa6 1388 2a2a 93a0 9d70 4aae
0x0020: 8018 0156 ff63 0000 0101 080a 0006 51c9
0x0030: 0006 51bc 7b22 6170 7022 3a7b 226d 6f74
0x0040: 6565 7569 223a 2234 6137 3730 3032 3031
0x0050: 3631 3031 3622 2c22 6469 7222 3a22 7570
0x0060: 222c 2273 6571 6e6f 223a 3532 332c 2275
0x0070: 7365 7264 6174 6122 3a7b 2270 6f72 7422
0x0080: 3a32 2c22 7061 796c 6f61 6422 3a22 4151
0x0090: 4944 4241 5547 4277 674a 4367 734d 4451
0x00a0: 3450 227d 2c22 6d6f 7465 7478 223a 7b22
0x00b0: 6672 6571 223a 3437 312e 352c 2264 6174
0x00c0: 7222 3a22 5346 3132 4257 3132 3522 2c22
0x00d0: 636f 6472 223a 2234 2f35 222c 2261 6472
0x00e0: 223a 6661 6c73 657d 2c22 6777 7278 223a
0x00f0: 5b7b 2265 7569 223a 2266 6666 6562 3832
0x0100: 3765 6266 3231 6130 3722 2c22 7469 6d65
0x0110: 223a 2232 3031 362d 3131 2d32 3454 3135
0x0120: 3a33 303a 3533 5a22 2c22 7469 6d65 6672
0x0130: 6f6d 6761 7465 7761 7922 3a66 616c 7365
0x0140: 2c22 6368 616e 223a 342c 2272 6663 6822
0x0150: 3a30 2c22 7273 7369 223a 2d37 392c 226c
0x0160: 736e 7222 3a2d 3136 2e35 7d5d 7d7d 00
提取其中的数据部分为:
{
"app": {
"moteeui": "4a770020161016",
"dir": "up",
"seqno": 523,
"userdata": {
"port": 2,
"payload": "AQIDBAUGBwgJCgsMDQ4P"
},
"motetx": {
"freq": 471.5,
"datr": "SF12BW125",
"codr": "4/5",
"adr": false
},
"gwrx": [
{
"eui": "fffeb827ebf21a07",
"time": "2016-11-24T15:30:53Z",
"timefromgateway": false,
"chan": 4,
"rfch": 0,
"rssi": -79,
"lsnr": -16.5
}
]
}
}
再把app.userdata.payload 做base64解码之后,得到的payload内容是这个:
\x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08
\x09 \x0a \x0b \x0c \x0d \x0e \x0f
而此时,数据已经完全解密了,可以看到数据就是在AS解密的,解密完再发送给CS,CS再做进一步用户协议的处理。
在这里,我们可以看到,AS已经将NS传输过来的JSON包的payload部分做了解密,然后再传给了CS。所以解密工作是在AS完成的。
邮箱地址:[email protected] 欢迎咨询搭讪
在LoRaWAN中,node最终和服务器能够正常数据交互,需要先入网,入网的本质,也就是获得一些通信相关的参数,有以下几个:
1. NwkSKey
2. AppSKey
3. DevAddr
4. DevEui
其中
· NwkSKey用于数据的校验,也就是说在MIC校验时会用到
· AppSKey用于负载的AES加密,也就是说在加密解密时会使用到
· DevAddr是node的短地址,在数据通讯时,使用的是node的短地址
· DevEUI 在ABP入网方式的通讯中不会使用,在OTAA方式中会使用到,是由设备在入网前就产生了。在入网时,node将DevEUI上传,然后服务器会将此DevEUI注册并返回一个DevAddr,也就是说DevAddr此时和DevEUI就建立了映射关系,在node后续的通讯中,使用DevAddr。
LoRaWAN入网方式有两种:
1. ABP (Activation By Personalization)
2. OTAA(Over-The-Air Activation)
下面就讲述一下这两种方式。
ABP方式是事先将入网信息烧写在设备上,也就是说设备上电已经入网了,无需再特意去请求入网。
这种方式就不再多说了。
OTAA方式入网的node,在刚上电的时候,是不处于入网状态的,此时就需要进行入网操作。
如果我们简单的把服务器看做一个整体,那么入网操作的流程是这样的:
1. node 发送入网请求,即join_request message
2. GW 收到 node 的数据,上传给服务器
3. 服务器收到入网请求,同意入网,并且将设备在服务器注册,建立长地址与短地址之间的联系,生成通讯密钥,将通讯密钥的参数打包下发给GW,即 Join-accept message
4. GW 收到服务器的数据,下发给 node
5. node 根据下发的数据包,得到 DevAddr、APPSKEY、NWKSKEY
这篇文章先大概的描述一下两种入网方式
详细的关于OTAA的入网方式见下一篇文章,会有OTAA的抓包分析,以及APPSKEY/NWKSKEY的生成过程,并且有C语言的Example。
OTAA(Over-The-Air Activation),是LoRaWAN的一种空中入网方式。当node在上电的时候处于非入网状态时,需要先入网才能和服务器进行通信。其操作就是node发送join_request message,请求入网,然后服务器同意入网,并且返回Join-accept message,node再对信息进行解析,获取通信参数,之后就可以和服务器通信了。
顺便分享几个工具网站给大家:
1. HEX/字符串转换 http://tool.lu/hexstr/
2. JSON校验 http://www.bejson.com/
3. BASE64编码/解码 http://www1.tc711.com/tool/BASE64.htm
node端在做OTAA入网之前,需要先具备三个参数:
· APPEUI node自定义的8字节长地址
· APPKEY 服务器和node端都事先存好,用于对Join_acept message 做加解密处理
· DevNonce 2字节的随机数,用于生成随机的AppSKey和NwkSKey
这些参数可以通过程序固话在里面,或者通过串口或其他方式在入网操作前告诉node。
当这些准备工作都做好了之后,node设备就能够入网了。
1.node发起入网请求,也就是发送join_request message,
根据LoRaWAN specification 可知,join_request message的格式如下:
MHDR |
APPEUI |
DevEUI |
DevNonce |
MIC |
1字节 |
8字节 |
8字节 |
2字节 |
4字节 |
其中
字段 |
描述 |
MHDR |
数据包头,其中包含了数据包的类型,也就是说从这个包头可以知道,这是一个join_request message |
APPEUI |
应用EUI |
DevEUI |
node的长地址,由node自己定义 |
DevNonce |
一个随机数,用来生成密码 |
MIC |
4字节的校验 |
需要注意的是Join_request message是未加密的
2.GW将此数据上传至NS
GW对MAC层的数据不进行解析,而是直接将其进行base64编码之后,封装成JSON包上传至NS,MAC层的数据位于rxpk.data
样例数据:
{
"rxpk": [
{
"tmst": 532505620,
"chan": 6,
"rfch": 0,
"freq": 471.9,
"stat": 1,
"modu": "LORA",
"datr": "SF12BW125",
"codr": "4/5",
"lsnr": -17,
"rssi": -81,
"size": 23,
"data": "AAEAACAAxSYsFhAWIAB3SgBUe0At4Zo="
}
]}
此处,将data进行base64解码,我们就可以看到MAC层数据了,因为join_request message数据是未加密的
data部分(AAEAACAAxSYsFhAWIAB3SgBUe0At4Zo=)的内容如下:
\x00 \x01 \x00 \x00 \x20 \x00 \xc5 \x26
\x2c \x16 \x10 \x16 \x20 \x00 \x77 \x4a
\x00 \x54 \x7b \x40 \x2d \xe1 \x9a
各部分的内容分别为:
字段 |
内容 |
MHDR |
\x00 |
AppEUI |
\x01 \x00 \x00 \x20 \x00 \xc5 \x26 \x2c |
DevEUI |
\x16 \x10 \x16 \x20 \x00 \x77 \x4a \x00 |
DevNonce |
\x54 \x7b |
MIC |
\x40 \x2d \xe1 \x9a |
3.NS向AS发送设备入网包
样例数据:
{
"join": {
"request": {
"frame": "AAEAACAAxSYsFhAWIAB3SgBUe0At4Zo"
}
}}
将join.frame进行base64 解码,得到的内容为:
\x00 \x01 \x00 \x00 \x20 \x00 \xc5 \x26
\x2c \x16 \x10 \x16 \x20 \x00 \x77 \x4a
\x00 \x54 \x7b \x40 \x2d \xe1 \x9a
可以看到,原先的MAC 层的data数据没有变化
4.AS同意入网并且向NS回复同意入网
样例数据:
{
"join": {
"moteeui": "4a770020161016",
"accept": true
}}
5.NS生成MoteAddr,并将node端的信息发送给AS
样例数据:
{
"join": {
"appeui": "2c26c50020000001",
"moteeui": "4a770020161016",
"details": {
"moteaddr": "48000002",
"devicenonce": 31572
}
}}
6.AS生成密钥,并将相关信息告诉NS
样例数据:
{
"join": {
"moteeui": "4a770020161016",
"complete": {
"frame": "IPqAKXQ7LS/CmYVCDy8K3k4",
"networkkey": "de03331aeb4254e9727b6fafbf13db3d"
}
}}
可以看到,networkkey直接发送给NS了,这也就是NwkSKey,之所以明文告诉NS,是因为:
1.NS不做解密的工作,所以不能通过APPKEY解密负载得到
2.networkkey在NS对上下行数据进行校验的时候会使用到
7.NS将数据告诉GW,GW再转换成MAC包,发送给node
样例数据:
{
"txpk": {
"tmst": 537505620,
"freq": 471.9,
"rfch": 0,
"powe": 14,
"modu": "LORA",
"datr": "SF12BW125",
"codr": "4/5",
"ipol": true,
"size": 17,
"data": "IPqAKXQ7LS/CmYVCDy8K3k4"
}}
需要注意的是,此时的data部分是经过base64编码以及AES加密的,直接解码,看到的数据是无效的,需要再进行解密,解密需要使用APPKEY,也就是之前介绍的APPKEY.
txpk.data部分就是LoRaWAN MAC的join_accept message.
8.node解析join_accept message 部分
根据LoRaWAN specification 可知,join_accept message的格式如下:
MHDR |
AppNonce |
NetID |
DevAddr |
DLSettings |
RxDelay |
CFList(pad16) |
MIC |
1字节 |
3字节 |
3字节 |
4字节 |
4字节 |
1字节 |
0/16字节 |
4字节 |
其中
字段 |
描述 |
MHDR |
数据包头,其中包含了数据包的类型,也就是说从这个包头可以知道,这是一个join_accept message |
AppNonce |
3字节的unique ID,服务器生成的,产生AppSKey/NwkSKey 会用到 |
NetID |
网络ID,产生AppSKey/NwkSKey 会用到 |
DevAddr |
设备的短地址 |
DLSettings |
设置RX1和RX2的下行接受串口的速率 |
RxDelay |
从发送完成到打开RX1接受串口的事件 |
CFList(pad16) |
我也不知道是什么,目前看到的都是0个字节 |
MIC |
4字节的校验 |
需要注意的是Join_accept message是加密的,需要使用APPKEY解密
txpk.data:
"data": "IPqAKXQ7LS/CmYVCDy8K3k4"
base64解码:
\x20 \xfa \x80 \x29 \x74 \x3b \x2d \x2f
\xc2 \x99 \x85 \x42 \x0f \x2f \x0a \xde
\x4e
这个数据是未解密的,我们还需要解密
解密后为
\x20 \x43 \x75 \xcb \x24 \x00 \x00 \x02
\x00 \x00 \x48 \x03 \x00 \x82 \xc9 \xd0
\xf9
具体的情况如下:
字段 |
解密前 |
解密后 |
MHDR |
\x20 |
\x20 |
AppNonce |
\xfa \x80 \x29 |
\x43 \x75 \xcb |
NetID |
\x74 \x3b \x2d |
\x24 \x0 \x0 |
DevAddr |
\x2f \xc2 \x99 \x85 |
\x2 \x0 \x0 \x48 |
DLSettings |
\x42 |
\x3 |
RxDelay |
\x0f |
\x0 |
CFList |
|
|
MIC |
\x2f \x0a \xde \x4e |
\x82 \xc9 \xd0 \xf9 |
可以看到,DevAddr为0x48000002,而AppSKey和NwkSKey无法直接看出来,需要再计算
计算公式如下:
· NwkSKey = aes128_encrypt(AppKey, 0x01 | AppNonce | NetID | DevNonce | pad16)
· AppSKey = aes128_encrypt(AppKey, 0x02 | AppNonce | NetID | DevNonce | pad16)
下一篇文章,我会把这个解密的过程,以及NwkSKey/AppSKey的计算过程,配合C语言,再分析一下。
以下的GW指Gateway
所用指令:
tcpdump -i lo -nn -x 'length>100'
OTAA入网流程,ABP方式入网则不需要
· GW -> NS join_request
16:38:10.426740 IP 127.0.0.1.49875 > 127.0.0.1.1680: UDP, length 208
0x0000: 4500 00ec 9d19 4000 4011 9ee5 7f00 0001
0x0010: 7f00 0001 c2d3 0690 00d8 feeb 0154 9f00
0x0020: fffe b827 ebf2 1a07 7b22 7278 706b 223a
0x0030: 5b7b 2274 6d73 7422 3a35 3332 3530 3536
0x0040: 3230 2c22 6368 616e 223a 362c 2272 6663
0x0050: 6822 3a30 2c22 6672 6571 223a 3437 312e
0x0060: 3930 3030 3030 2c22 7374 6174 223a 312c
0x0070: 226d 6f64 7522 3a22 4c4f 5241 222c 2264
0x0080: 6174 7222 3a22 5346 3132 4257 3132 3522
0x0090: 2c22 636f 6472 223a 2234 2f35 222c 226c
0x00a0: 736e 7222 3a2d 3137 2e30 2c22 7273 7369
0x00b0: 223a 2d38 312c 2273 697a 6522 3a32 332c
0x00c0: 2264 6174 6122 3a22 4141 4541 4143 4141
0x00d0: 7853 5973 4668 4157 4941 4233 5367 4255
0x00e0: 6530 4174 345a 6f3d 227d 5d7d
7b22 7278 706b 223a5b7b 2274 6d73 7422 3a35 3332 3530 35363230 2c22 6368 616e 223a 362c 2272 66636822 3a30 2c22 6672 6571 223a 3437 312e3930 3030 3030 2c22 7374 6174 223a 312c226d 6f64 7522 3a22 4c4f 5241 222c 22646174 7222 3a22 5346 3132 4257 3132 35222c22 636f 6472 223a 2234 2f35 222c 226c736e 7222 3a2d 3137 2e30 2c22 7273 7369223a 2d38 312c 2273 697a 6522 3a32 332c2264 6174 6122 3a22 4141 4541 4143 41417853 5973 4668 4157 4941 4233 5367 42556530 4174 345a 6f3d 227d 5d7d
{
"rxpk": [
{
"tmst": 532505620,
"chan": 6,
"rfch": 0,
"freq": 471.9,
"stat": 1,
"modu": "LORA",
"datr": "SF12BW125",
"codr": "4/5",
"lsnr": -17,
"rssi": -81,
"size": 23,
"data": "AAEAACAAxSYsFhAWIAB3SgBUe0At4Zo="
}
]}
data base64 decode:
\x00 \x01 \x00 \x00 \x20 \x00 \xc5 \x26
\x2c \x16 \x10 \x16 \x20 \x00 \x77 \x4a
\x00 \x54 \x7b \x40 \x2d \xe1 \x9a
· NS -> AS
16:38:10.427560 IP 127.0.0.1.42189 > 127.0.0.1.4000: Flags [P.], seq 976281099:976281164, ack 424415867, win 350, options [nop,nop,TS val 457630 ecr 457618], length 65
0x0000: 4500 0075 26ca 4000 4006 15b7 7f00 0001
0x0010: 7f00 0001 a4cd 0fa0 3a30 de0b 194c 127b
0x0020: 8018 015e fe69 0000 0101 080a 0006 fb9e
0x0030: 0006 fb92 7b22 6a6f 696e 223a 7b22 7265
0x0040: 7175 6573 7422 3a7b 2266 7261 6d65 223a
0x0050: 2241 4145 4141 4341 4178 5359 7346 6841
0x0060: 5749 4142 3353 6742 5565 3041 7434 5a6f
0x0070: 227d 7d7d 00
7b22 6a6f 696e 223a 7b22 72657175 6573 7422 3a7b 2266 7261 6d65 223a2241 4145 4141 4341 4178 5359 7346 68415749 4142 3353 6742 5565 3041 7434 5a6f227d 7d7d 00
{
"join": {
"request": {
"frame": "AAEAACAAxSYsFhAWIAB3SgBUe0At4Zo"
}
}}
frame base64 decode:
\x00 \x01 \x00 \x00 \x20 \x00 \xc5 \x26
\x2c \x16 \x10 \x16 \x20 \x00 \x77 \x4a
\x00 \x54 \x7b \x40 \x2d \xe1 \x9a
· AS -> NS
16:38:10.439244 IP 127.0.0.1.4000 > 127.0.0.1.42189: Flags [P.], seq 1:53, ack 65, win 6146, options [nop,nop,TS val 457631 ecr 457630], length 52
0x0000: 4500 0068 c4fa 4000 4006 7793 7f00 0001
0x0010: 7f00 0001 0fa0 a4cd 194c 127b 3a30 de4c
0x0020: 8018 1802 fe5c 0000 0101 080a 0006 fb9f
0x0030: 0006 fb9e 7b22 6a6f 696e 223a 7b22 6d6f
0x0040: 7465 6575 6922 3a22 3461 3737 3030 3230
0x0050: 3136 3130 3136 222c 2261 6363 6570 7422
0x0060: 3a74 7275 657d 7d00
7b22 6a6f 696e 223a 7b22 6d6f7465 6575 6922 3a22 3461 3737 3030 32303136 3130 3136 222c 2261 6363 6570 74223a74 7275 657d 7d00
{
"join": {
"moteeui": "4a770020161016",
"accept": true
}}
· NS -> AS
16:38:10.440946 IP 127.0.0.1.42189 > 127.0.0.1.4000: Flags [P.], seq 65:185, ack 53, win 350, options [nop,nop,TS val 457631 ecr 457631], length 120
0x0000: 4500 00ac 26cc 4000 4006 157e 7f00 0001
0x0010: 7f00 0001 a4cd 0fa0 3a30 de4c 194c 12af
0x0020: 8018 015e fea0 0000 0101 080a 0006 fb9f
0x0030: 0006 fb9f 7b22 6a6f 696e 223a 7b22 6170
0x0040: 7065 7569 223a 2232 6332 3663 3530 3032
0x0050: 3030 3030 3030 3122 2c22 6d6f 7465 6575
0x0060: 6922 3a22 3461 3737 3030 3230 3136 3130
0x0070: 3136 222c 2264 6574 6169 6c73 223a 7b22
0x0080: 6d6f 7465 6164 6472 223a 2234 3830 3030
0x0090: 3030 3222 2c22 6465 7669 6365 6e6f 6e63
0x00a0: 6522 3a33 3135 3732 7d7d 7d00
7b22 6a6f 696e 223a 7b22 61707065 7569 223a 2232 6332 3663 3530 30323030 3030 3030 3122 2c22 6d6f 7465 65756922 3a22 3461 3737 3030 3230 3136 31303136 222c 2264 6574 6169 6c73 223a 7b226d6f 7465 6164 6472 223a 2234 3830 30303030 3222 2c22 6465 7669 6365 6e6f 6e636522 3a33 3135 3732 7d7d 7d00
{
"join": {
"appeui": "2c26c50020000001",
"moteeui": "4a770020161016",
"details": {
"moteaddr": "48000002",
"devicenonce": 31572
}
}}
· AS -> NS
16:38:10.482046 IP 127.0.0.1.4000 > 127.0.0.1.42189: Flags [P.], seq 53:186, ack 185, win 6146, options [nop,nop,TS val 457636 ecr 457631], length 133
0x0000: 4500 00b9 c4fc 4000 4006 7740 7f00 0001
0x0010: 7f00 0001 0fa0 a4cd 194c 12af 3a30 dec4
0x0020: 8018 1802 fead 0000 0101 080a 0006 fba4
0x0030: 0006 fb9f 7b22 6a6f 696e 223a 7b22 6d6f
0x0040: 7465 6575 6922 3a22 3461 3737 3030 3230
0x0050: 3136 3130 3136 222c 2263 6f6d 706c 6574
0x0060: 6522 3a7b 2266 7261 6d65 223a 2249 5071
0x0070: 414b 5851 374c 532f 436d 5956 4344 7938
0x0080: 4b33 6b34 222c 226e 6574 776f 726b 6b65
0x0090: 7922 3a22 6465 3033 3333 3161 6562 3432
0x00a0: 3534 6539 3732 3762 3666 6166 6266 3133
0x00b0: 6462 3364 227d 7d7d 00
7b22 6a6f 696e 223a 7b22 6d6f7465 6575 6922 3a22 3461 3737 3030 32303136 3130 3136 222c 2263 6f6d 706c 65746522 3a7b 2266 7261 6d65 223a 2249 5071414b 5851 374c 532f 436d 5956 4344 79384b33 6b34 222c 226e 6574 776f 726b 6b657922 3a22 6465 3033 3333 3161 6562 34323534 6539 3732 3762 3666 6166 6266 31336462 3364 227d 7d7d 00
{
"join": {
"moteeui": "4a770020161016",
"complete": {
"frame": "IPqAKXQ7LS/CmYVCDy8K3k4",
"networkkey": "de03331aeb4254e9727b6fafbf13db3d"
}
}}
frame base64 decode:
\x20 \xfa \x80 \x29 \x74 \x3b \x2d \x2f
\xc2 \x99 \x85 \x42 \x0f \x2f \x0a \xde
\x4e
· AS -> CS
16:38:10.482266 IP 127.0.0.1.37188 > 127.0.0.1.5000: Flags [P.], seq 3036262291:3036262362, ack 3069608558, win 342, options [nop,nop,TS val 457636 ecr 457633], length 71
0x0000: 4500 007b 155e 4000 4006 271d 7f00 0001
0x0010: 7f00 0001 9144 1388 b4f9 af93 b6f6 826e
0x0020: 8018 0156 fe6f 0000 0101 080a 0006 fba4
0x0030: 0006 fba1 7b22 6d6f 7465 223a 7b22 6575
0x0040: 6922 3a22 3461 3737 3030 3230 3136 3130
0x0050: 3136 222c 226a 6f69 6e22 3a7b 2261 7070
0x0060: 6575 6922 3a22 3263 3236 6335 3030 3230
0x0070: 3030 3030 3031 227d 7d7d 00
7b22 6d6f 7465 223a 7b22 65756922 3a22 3461 3737 3030 3230 3136 31303136 222c 226a 6f69 6e22 3a7b 2261 70706575 6922 3a22 3263 3236 6335 3030 32303030 3030 3031 227d 7d7d 00
{
"mote": {
"eui": "4a770020161016",
"join": {
"appeui": "2c26c50020000001"
}
}}
· NS->GW Join_accept message
16:38:14.677344 IP 127.0.0.1.1680 > 127.0.0.1.48034: UDP, length 169
0x0000: 4500 00c5 9d74 4000 4011 9eb1 7f00 0001
0x0010: 7f00 0001 0690 bba2 00b1 fec4 0100 0003
0x0020: 7b22 7478 706b 223a 7b22 746d 7374 223a
0x0030: 3533 3735 3035 3632 302c 2266 7265 7122
0x0040: 3a34 3731 2e39 3030 3030 302c 2272 6663
0x0050: 6822 3a30 2c22 706f 7765 223a 3134 2c22
0x0060: 6d6f 6475 223a 224c 4f52 4122 2c22 6461
0x0070: 7472 223a 2253 4631 3242 5731 3235 222c
0x0080: 2263 6f64 7222 3a22 342f 3522 2c22 6970
0x0090: 6f6c 223a 7472 7565 2c22 7369 7a65 223a
0x00a0: 3137 2c22 6461 7461 223a 2249 5071 414b
0x00b0: 5851 374c 532f 436d 5956 4344 7938 4b33
0x00c0: 6b34 227d 7d
7b22 7478 706b 223a 7b22 746d 7374 223a3533 3735 3035 3632 302c 2266 7265 71223a34 3731 2e39 3030 3030 302c 2272 66636822 3a30 2c22 706f 7765 223a 3134 2c226d6f 6475 223a 224c 4f52 4122 2c22 64617472 223a 2253 4631 3242 5731 3235 222c2263 6f64 7222 3a22 342f 3522 2c22 69706f6c 223a 7472 7565 2c22 7369 7a65 223a3137 2c22 6461 7461 223a 2249 5071 414b5851 374c 532f 436d 5956 4344 7938 4b336b34 227d 7d
{
"txpk": {
"tmst": 537505620,
"freq": 471.9,
"rfch": 0,
"powe": 14,
"modu": "LORA",
"datr": "SF12BW125",
"codr": "4/5",
"ipol": true,
"size": 17,
"data": "IPqAKXQ7LS/CmYVCDy8K3k4"
}}
data base64 decode:
\x20 \xfa \x80 \x29 \x74 \x3b \x2d \x2f
\xc2 \x99 \x85 \x42 \x0f \x2f \x0a \xde
\x4e
· GW -> NS
16:38:15.360678 IP 127.0.0.1.49875 > 127.0.0.1.1680: UDP, length 113
0x0000: 4500 008d 9d77 4000 4011 9ee6 7f00 0001
0x0010: 7f00 0001 c2d3 0690 0079 fe8c 014d 2900
0x0020: fffe b827 ebf2 1a07 7b22 7374 6174 223a
0x0030: 7b22 7469 6d65 223a 2232 3031 362d 3131
0x0040: 2d32 3420 3136 3a33 383a 3135 2047 4d54
0x0050: 222c 2272 786e 6222 3a33 2c22 7278 6f6b
0x0060: 223a 312c 2272 7866 7722 3a31 2c22 6163
0x0070: 6b72 223a 3130 302e 302c 2264 776e 6222
0x0080: 3a31 2c22 7478 6e62 223a 317d 7d
7b22 7374 6174 223a7b22 7469 6d65 223a 2232 3031 362d 31312d32 3420 3136 3a33 383a 3135 2047 4d54222c 2272 786e 6222 3a33 2c22 7278 6f6b223a 312c 2272 7866 7722 3a31 2c22 61636b72 223a 3130 302e 302c 2264 776e 62223a31 2c22 7478 6e62 223a 317d 7d
{
"stat": {
"time": "2016-11-24 16:38:15 GMT",
"rxnb": 3,
"rxok": 1,
"rxfw": 1,
"ackr": 100,
"dwnb": 1,
"txnb": 1
}}
· GW->NS
16:38:20.430581 IP 127.0.0.1.49875 > 127.0.0.1.1680: UDP, length 216
0x0000: 4500 00f4 9e4d 4000 4011 9da9 7f00 0001
0x0010: 7f00 0001 c2d3 0690 00e0 fef3 0116 b300
0x0020: fffe b827 ebf2 1a07 7b22 7278 706b 223a
0x0030: 5b7b 2274 6d73 7422 3a35 3432 3531 3235
0x0040: 3030 2c22 6368 616e 223a 312c 2272 6663
0x0050: 6822 3a31 2c22 6672 6571 223a 3437 322e
0x0060: 3530 3030 3030 2c22 7374 6174 223a 312c
0x0070: 226d 6f64 7522 3a22 4c4f 5241 222c 2264
0x0080: 6174 7222 3a22 5346 3132 4257 3132 3522
0x0090: 2c22 636f 6472 223a 2234 2f35 222c 226c
0x00a0: 736e 7222 3a2d 3138 2e30 2c22 7273 7369
0x00b0: 223a 2d38 352c 2273 697a 6522 3a32 382c
0x00c0: 2264 6174 6122 3a22 5141 4941 4145 6741
0x00d0: 4151 4143 7168 6831 5745 4967 4477 584d
0x00e0: 4366 3576 4174 616b 414e 5348 5267 3d3d
0x00f0: 227d 5d7d
7b22 7278 706b 223a5b7b 2274 6d73 7422 3a35 3432 3531 32353030 2c22 6368 616e 223a 312c 2272 66636822 3a31 2c22 6672 6571 223a 3437 322e3530 3030 3030 2c22 7374 6174 223a 312c226d 6f64 7522 3a22 4c4f 5241 222c 22646174 7222 3a22 5346 3132 4257 3132 35222c22 636f 6472 223a 2234 2f35 222c 226c736e 7222 3a2d 3138 2e30 2c22 7273 7369223a 2d38 352c 2273 697a 6522 3a32 382c2264 6174 6122 3a22 5141 4941 4145 67414151 4143 7168 6831 5745 4967 4477 584d4366 3576 4174 616b 414e 5348 5267 3d3d227d 5d7d
{
"rxpk": [
{
"tmst": 542512500,
"chan": 1,
"rfch": 1,
"freq": 472.5,
"stat": 1,
"modu": "LORA",
"datr": "SF12BW125",
"codr": "4/5",
"lsnr": -18,
"rssi": -85,
"size": 28,
"data": "QAIAAEgAAQACqhh1WEIgDwXMCf5vAtakANSHRg=="
}
]}
data base64 decode:
\x40 \x02 \x00 \x00 \x48 \x00 \x01 \x00
\x02 \xaa \x18 \x75 \x58 \x42 \x20 \x0f
\x05 \xcc \x09 \xfe \x6f \x02 \xd6 \xa4
\x00 \xd4 \x87 \x46
· NS -> AS
16:38:20.786860 IP 127.0.0.1.42189 > 127.0.0.1.4000: Flags [P.], seq 219:530, ack 221, win 359, options [nop,nop,TS val 458666 ecr 458661], length 311
0x0000: 4500 016b 2713 4000 4006 1478 7f00 0001
0x0010: 7f00 0001 a4cd 0fa0 3a30 dee6 194c 1357
0x0020: 8018 0167 ff5f 0000 0101 080a 0006 ffaa
0x0030: 0006 ffa5 7b22 6170 7022 3a7b 226d 6f74
0x0040: 6565 7569 223a 2234 6137 3730 3032 3031
0x0050: 3631 3031 3622 2c22 6469 7222 3a22 7570
0x0060: 222c 2273 6571 6e6f 223a 312c 2275 7365
0x0070: 7264 6174 6122 3a7b 2270 6f72 7422 3a32
0x0080: 2c22 7061 796c 6f61 6422 3a22 7168 6831
0x0090: 5745 4967 4477 584d 4366 3576 4174 616b
0x00a0: 227d 2c22 6d6f 7465 7478 223a 7b22 6672
0x00b0: 6571 223a 3437 322e 352c 2264 6174 7222
0x00c0: 3a22 5346 3132 4257 3132 3522 2c22 636f
0x00d0: 6472 223a 2234 2f35 222c 2261 6472 223a
0x00e0: 6661 6c73 657d 2c22 6777 7278 223a 5b7b
0x00f0: 2265 7569 223a 2266 6666 6562 3832 3765
0x0100: 6266 3231 6130 3722 2c22 7469 6d65 223a
0x0110: 2232 3031 362d 3131 2d32 3454 3136 3a33
0x0120: 383a 3230 5a22 2c22 7469 6d65 6672 6f6d
0x0130: 6761 7465 7761 7922 3a66 616c 7365 2c22
0x0140: 6368 616e 223a 312c 2272 6663 6822 3a31
0x0150: 2c22 7273 7369 223a 2d38 352c 226c 736e
0x0160: 7222 3a2d 3138 7d5d 7d7d 00
7b22 6170 7022 3a7b 226d 6f746565 7569 223a 2234 6137 3730 3032 30313631 3031 3622 2c22 6469 7222 3a22 7570222c 2273 6571 6e6f 223a 312c 2275 73657264 6174 6122 3a7b 2270 6f72 7422 3a322c22 7061 796c 6f61 6422 3a22 7168 68315745 4967 4477 584d 4366 3576 4174 616b227d 2c22 6d6f 7465 7478 223a 7b22 66726571 223a 3437 322e 352c 2264 6174 72223a22 5346 3132 4257 3132 3522 2c22 636f6472 223a 2234 2f35 222c 2261 6472 223a6661 6c73 657d 2c22 6777 7278 223a 5b7b2265 7569 223a 2266 6666 6562 3832 37656266 3231 6130 3722 2c22 7469 6d65 223a2232 3031 362d 3131 2d32 3454 3136 3a33383a 3230 5a22 2c22 7469 6d65 6672 6f6d6761 7465 7761 7922 3a66 616c 7365 2c226368 616e 223a 312c 2272 6663 6822 3a312c22 7273 7369 223a 2d38 352c 226c 736e7222 3a2d 3138 7d5d 7d7d 00
{
"app": {
"moteeui": "4a770020161016",
"dir": "up",
"seqno": 1,
"userdata": {
"port": 2,
"payload": "qhh1WEIgDwXMCf5vAtak"
},
"motetx": {
"freq": 472.5,
"datr": "SF12BW125",
"codr": "4/5",
"adr": false
},
"gwrx": [
{
"eui": "fffeb827ebf21a07",
"time": "2016-11-24T16:38:20Z",
"timefromgateway": false,
"chan": 1,
"rfch": 1,
"rssi": -85,
"lsnr": -18
}
]
}}
· AS -> NC
16:38:20.787061 IP 127.0.0.1.45769 > 127.0.0.1.6000: Flags [P.], seq 3402358219:3402358475, ack 524101621, win 342, options [nop,nop,TS val 458666 ecr 458646], length 256
0x0000: 4500 0134 9fbb 4000 4006 9c06 7f00 0001
0x0010: 7f00 0001 b2c9 1770 cacb ddcb 1f3d 27f5
0x0020: 8018 0156 ff28 0000 0101 080a 0006 ffaa
0x0030: 0006 ff96 7b22 6170 7022 3a7b 226d 6f74
0x0040: 6565 7569 223a 2234 6137 3730 3032 3031
0x0050: 3631 3031 3622 2c22 6469 7222 3a22 7570
0x0060: 222c 2273 6571 6e6f 223a 312c 226d 6f74
0x0070: 6574 7822 3a7b 2266 7265 7122 3a34 3732
0x0080: 2e35 2c22 6461 7472 223a 2253 4631 3242
0x0090: 5731 3235 222c 2263 6f64 7222 3a22 342f
0x00a0: 3522 2c22 6164 7222 3a66 616c 7365 7d2c
0x00b0: 2267 7772 7822 3a5b 7b22 6575 6922 3a22
0x00c0: 6666 6665 6238 3237 6562 6632 3161 3037
0x00d0: 222c 2274 696d 6522 3a22 3230 3136 2d31
0x00e0: 312d 3234 5431 363a 3338 3a32 305a 222c
0x00f0: 2274 696d 6566 726f 6d67 6174 6577 6179
0x0100: 223a 6661 6c73 652c 2263 6861 6e22 3a31
0x0110: 2c22 7266 6368 223a 312c 2272 7373 6922
0x0120: 3a2d 3835 2c22 6c73 6e72 223a 2d31 387d
0x0130: 5d7d 7d00
· AS ->CS
16:38:20.787587 IP 127.0.0.1.37188 > 127.0.0.1.5000: Flags [P.], seq 105:416, ack 36, win 342, options [nop,nop,TS val 458666 ecr 458662], length 311
0x0000: 4500 016b 15a4 4000 4006 25e7 7f00 0001
0x0010: 7f00 0001 9144 1388 b4f9 affc b6f6 8291
0x0020: 8018 0156 ff5f 0000 0101 080a 0006 ffaa
0x0030: 0006 ffa6 7b22 6170 7022 3a7b 226d 6f74
0x0040: 6565 7569 223a 2234 6137 3730 3032 3031
0x0050: 3631 3031 3622 2c22 6469 7222 3a22 7570
0x0060: 222c 2273 6571 6e6f 223a 312c 2275 7365
0x0070: 7264 6174 6122 3a7b 2270 6f72 7422 3a32
0x0080: 2c22 7061 796c 6f61 6422 3a22 4151 4944
0x0090: 4241 5547 4277 674a 4367 734d 4451 3450
0x00a0: 227d 2c22 6d6f 7465 7478 223a 7b22 6672
0x00b0: 6571 223a 3437 322e 352c 2264 6174 7222
0x00c0: 3a22 5346 3132 4257 3132 3522 2c22 636f
0x00d0: 6472 223a 2234 2f35 222c 2261 6472 223a
0x00e0: 6661 6c73 657d 2c22 6777 7278 223a 5b7b
0x00f0: 2265 7569 223a 2266 6666 6562 3832 3765
0x0100: 6266 3231 6130 3722 2c22 7469 6d65 223a
0x0110: 2232 3031 362d 3131 2d32 3454 3136 3a33
0x0120: 383a 3230 5a22 2c22 7469 6d65 6672 6f6d
0x0130: 6761 7465 7761 7922 3a66 616c 7365 2c22
0x0140: 6368 616e 223a 312c 2272 6663 6822 3a31
0x0150: 2c22 7273 7369 223a 2d38 352c 226c 736e
0x0160: 7222 3a2d 3138 7d5d 7d7d 00
7b22 6170 7022 3a7b 226d 6f746565 7569 223a 2234 6137 3730 3032 30313631 3031 3622 2c22 6469 7222 3a22 7570222c 2273 6571 6e6f 223a 312c 2275 73657264 6174 6122 3a7b 2270 6f72 7422 3a322c22 7061 796c 6f61 6422 3a22 4151 49444241 5547 4277 674a 4367 734d 4451 3450227d 2c22 6d6f 7465 7478 223a 7b22 66726571 223a 3437 322e 352c 2264 6174 72223a22 5346 3132 4257 3132 3522 2c22 636f6472 223a 2234 2f35 222c 2261 6472 223a6661 6c73 657d 2c22 6777 7278 223a 5b7b2265 7569 223a 2266 6666 6562 3832 37656266 3231 6130 3722 2c22 7469 6d65 223a2232 3031 362d 3131 2d32 3454 3136 3a33383a 3230 5a22 2c22 7469 6d65 6672 6f6d6761 7465 7761 7922 3a66 616c 7365 2c226368 616e 223a 312c 2272 6663 6822 3a312c22 7273 7369 223a 2d38 352c 226c 736e7222 3a2d 3138 7d5d 7d7d
{
"app": {
"moteeui": "4a770020161016",
"dir": "up",
"seqno": 1,
"userdata": {
"port": 2,
"payload": "AQIDBAUGBwgJCgsMDQ4P"
},
"motetx": {
"freq": 472.5,
"datr": "SF12BW125",
"codr": "4/5",
"adr": false
},
"gwrx": [
{
"eui": "fffeb827ebf21a07",
"time": "2016-11-24T16:38:20Z",
"timefromgateway": false,
"chan": 1,
"rfch": 1,
"rssi": -85,
"lsnr": -18
}
]
}}
app.userdata.payload base64+aes 解密,得到:
\x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08
\x09 \x0a \x0b \x0c \x0d \x0e \x0f
可以看到是用户发上去的负载了,说明解密的工作完成了
· GW->NS 时间同步包
16:37:45.362854 IP 127.0.0.1.49875 > 127.0.0.1.1680: UDP, length 113
0x0000: 4500 008d 9692 4000 4011 a5cb 7f00 0001
0x0010: 7f00 0001 c2d3 0690 0079 fe8c 01a0 6800
0x0020: fffe b827 ebf2 1a07 7b22 7374 6174 223a
0x0030: 7b22 7469 6d65 223a 2232 3031 362d 3131
0x0040: 2d32 3420 3136 3a33 373a 3435 2047 4d54
0x0050: 222c 2272 786e 6222 3a30 2c22 7278 6f6b
0x0060: 223a 302c 2272 7866 7722 3a30 2c22 6163
0x0070: 6b72 223a 3130 302e 302c 2264 776e 6222
0x0080: 3a30 2c22 7478 6e62 223a 307d 7d
7b22 7374 6174 223a7b22 7469 6d65 223a 2232 3031 362d 31312d32 3420 3136 3a33 373a 3435 2047 4d54222c 2272 786e 6222 3a30 2c22 7278 6f6b223a 302c 2272 7866 7722 3a30 2c22 61636b72 223a 3130 302e 302c 2264 776e 62223a30 2c22 7478 6e62 223a 307d 7d
· AS -> NC
16:38:24.471968 IP 127.0.0.1.45769 > 127.0.0.1.6000: Flags [P.], seq 268:327, ack 14, win 342, options [nop,nop,TS val 459035 ecr 459030], length 59
0x0000: 4500 006f 9fd5 4000 4006 9cb1 7f00 0001
0x0010: 7f00 0001 b2c9 1770 cacb ded7 1f3d 2802
0x0020: 8018 0156 fe63 0000 0101 080a 0007 011b
0x0030: 0007 0116 7b22 6777 223a 7b22 6575 6922
0x0040: 3a22 6666 6665 6238 3237 6562 6632 3161
0x0050: 3037 222c 226c 6f72 6172 6567 696f 6e22
0x0060: 3a22 6575 726f 7065 3836 3322 7d7d 00
7b22 6777 223a 7b22 6575 69223a22 6666 6665 6238 3237 6562 6632 31613037 222c 226c 6f72 6172 6567 696f 6e223a22 6575 726f 7065 3836 3322 7d7d 00
{
"gw": {
"eui": "fffeb827ebf21a07",
"loraregion": "europe863"
}}