# smartconfig **Repository Path**: bruce79/smartconfig ## Basic Information - **Project Name**: smartconfig - **Description**: linux 上实现smartconfig。来源于 https://github.com/jolin90/smartconfig。现会在其基础上加以修改。 - **Primary Language**: Unknown - **License**: MulanPSL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-03-05 - **Last Updated**: 2022-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Slink配置算法接收端 ## 设备要求 - 设备wifi必须支持混淆模式或监听模式 ## 算法设计需求和目的 模块如何连接路由器?为了实现这一功能,所以需要设计一种算法,让手机,模块,路由器三者之间实现一种有效的交互方式,在最短的时间里,以相对稳定,相对安全的方式实现让模块连上指定的路由器这一目的。 基于交互数据的安全性考虑,发送的数据全为加密的,以组播方式发送数据。 ## 算法设计 ### 算法过程 配置模式为手机发送指定端口号的UDP组播包,模块接收到数据包后进行解析,解析出正确的SSID名称和对应的密码,然后自动连接该SSID。 UDP数据解析 (解析成功)自动连接路由器 #### 数据包特征: 1. 获取接收数据包,判断是否为组播,即目标地址或SSID地址前三字节为0x01 0x00 0x5e。 2. 每个数据包组播地址由三个字段构成,每个字段一个字节。前三个字段为0x01 0x00 0x5e,第四个字段为数据包的发送序列号,第五个字段和第六个字段发送指定数据,取值范围0 – 255。 3. 本算法遵循标志位入口解读,即先发送解析入口3个特征包。 特征包之后发送长度数据包,该数据包第五个字段填写SSID长度a,第六个字段填写PWD长度b。发送数据总长度为max(a,b)+5。SSID长度最大为16个字符,PSW长度最大为32个字符(实际可用最大长度为60个字符)。 4. Crc效验格式为连续效验,采用异或方式。第5个数据包开始正式发送数据,每个数据包第三个字节发送SSID的ASCII码值c,第四个字节发送PWD的ASCII码值d。如果SSID或者PWD发送完毕,剩下的全部填0.比如:if(a>b), 第5+ b个数据包的第四个字段自动填0. Crc初始值为0.每个数据包结束Crc = Ccr^c^d;所有SSID和PWD发送完毕之后发送Crc数据包。SSID和PSW数据接收完成,按照上述方式计算CRC值,然后与接收的数据包进行对比,该数据包第四个字段为0x40,第五个字段为Crc值,第六个字段为Crc^0x01^(byte)0x5e^0x40。 5. 切换信道收取数据包,直到解析完成。 #### 例如: 1. 配置开始阶段接收3个特征码包,分别为 0x01 0x00 0x5e 0x00 0x48 0x35 0x01 0x00 0x5e 0x01 0x68 0x2b 0x01 0x00 0x5e 0x02 0x5c 0x31 2. 接收SSID的长度数据包和PSW长度 0x01 0x00 0x5e 0x03 SSID长度 PSW长度 SSID长度最大为16个字符,PSW长度最大为32个字符 3. 接收SSID和PSW字符 0x01 0x00 0x5e 0x04 A B 每个数据包取组播地址的最后后两个字节表示为SSID和PSW字 符,其中A为SSID的ASCII值,B为PSW的ASCII值,如果长度不相等,少的补0x00。 4. 接收crc效验码 0x01 0x00 0x5e 0x40 crc Crc^0x01^(byte)0x5e^0x40 #### 举例:SSID为“TP-LINK_hys”,PSW为“12345678”,发送组播地址如下: 0x01 0x00 0x5e 0x00 0x48 0x35 0x01 0x00 0x5e 0x01 0x68 0x2b 0x01 0x00 0x5e 0x02 0x5c 0x31 0x01 0x00 0x5e 0x03 0x0b 0x08 0x01 0x00 0x5e 0x04 ‘T’ ‘1’ 0x01 0x00 0x5e 0x05 ‘P’ ‘2’ 0x01 0x00 0x5e 0x06 ‘-‘ ‘3’ 0x01 0x00 0x5e 0x07 ‘L‘ ‘4’ 0x01 0x00 0x5e 0x08 ‘I‘ ‘5’ 0x01 0x00 0x5e 0x09 ‘N‘ ‘6’ 0x01 0x00 0x5e 0x0a ‘K‘ ‘7’ 0x01 0x00 0x5e 0x0b ‘_‘ ‘8’ 0x01 0x00 0x5e 0x0c ‘h‘ 0x00 0x01 0x00 0x5e 0x0d ‘y‘ 0x00 0x01 0x00 0x5e 0x0e ‘s‘ 0x00 0x01 0x00 0x5e 0x40 0x1c 0x03 ### 算法优势 本配置算法采取UDP组播,数据包长度小,发送的数据包数量少,解析数据成功率高,耗时短,出错率低!