具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,TDDP(TP-LINK Device Debug Protocol)协议是在UDP通信的基础之上设计的协议。TDDP协议使用应答模式来完成客户端与网络设备之间交互,完成对网络设备的控制。基于TDDP协议的通信模式遵照服务端被动、客户端主动的问答模式。
TDDP包的格式如下表所示:
TDDP报头格式如下:
各字段的意义如下:
Ver:TDDP协议的版本;
Type:报文类型,目前分为4类;包括:
A、设置配置信息,宏定义为:SET_USR_CFG;
B、获取配置信息,宏定义为:GET_SYS_INF;
C、特殊配置命令,宏定义为:CMD_SPE_OPR;
D、心跳包,宏定义为:HEART_BEAT;
Code:请求类型,包括:
A、请求报文,宏定义为:TDDP_REQUEST;
B、响应报文,宏定义为:TDDP_REPLY;
ReplyInfo:返回信息,包括:
A、命令执行成功,宏定义为:REPLY_OK;
B、命令执行错误,宏定义为:REPLY_ERROR;
PktLength:数据长度,不包括报头;
PktID:报文的ID,每发送一个,该值递增,返回报文应该和接收报文ID一致;
SubType:Type的子类型;对于Type中的设置配置信息和获取配置信息无定义,主要用于系统操作命令的子类型,如保存设置,重启路由器等;
宏定义包括:CMD_SYS_OPR、CMD_AUTO_TEST、CMD_CONFIG_MAC、CMD_CANCEL_TEST、CMD_GET_PROD_ID、CMD_SET_SIGN、CMD_SYS_INIT、CMD_CONFIG_PIN;
Reserve:保留;
Digest:对整个数据包计算MD5所获取的信息摘要。
将类型(Type)划分为大的三类,每大类再分子类型。(注:此设计方法类似ICMP协议的Type和Code的作用)
类型与子类型
1、三类类型:
SET_USR_CFG:设置配置信息,如用于对路由器基本配置信息进行设置的报文类型;
GET_SYS_INF:获取配置信息,如用于获取路由器基本配置信息的报文类型;
CMD_SPE_OPR:特殊配置命令,如对于路由器的配置,有些配置信息不属于基本配置信息,需要使用特殊的处理方式,此报文类型即为此目的而设置。
HEART_BEAT:心跳包,用于检测路由器是否在线的心跳包。如由客户端单播发出心跳包给路由器;如果发送N个心跳包,客户端都未收到路由器TDDP回复,则客户端认为路由器不在线,客户端提示用户路由器失去连接。
2、子类型:
对于设置配置信息和获取配置信息,无子类型。因此,此报文类型的子类型SubType的值清零(0x00);
对于特殊配置命令,其子类型的含义如下所示:
CMD_SYS_OPR:路由器的系统操作,包括:init、save、reboot、reset、clr_dos;
CMD_AUTO_TEST:用于写MAC操作中,用户回复CMD_SYS_INIT广播包;
CMD_CONFIG_MAC:设置出厂MAC的操作;
CMD_CANCEL_TEST:取消自动测试,停止接收广播包;
CMD_GET_PROD_ID:获取产品ID;
CMD_SYS_INIT:初始化路由器;
CMD_CONFIG_PIN:路由器PIN码;
报文ID(PktID),用户识别当前报文是否所需报文。服务端无需修改报文ID;客户端每次发送报文需要将报文ID递增1。(注:此设计类似于IP协议中的identification字段)
TDDP数据:
长度:
TDDP数据紧接着TDDP报头,由PktLength确定长度的TDDP协议所要传输的具体数据。
对于TDDP数据长度非8的整数倍,则在尾部添加填充值(PADDING)0x00到数据的尾部,使得TDDP数据的长度满足8的整数倍的要求。(注:此设计主要考虑DES算法);
数据格式:
目前数据字段存在两种格式:1、字符串;2、具体的操作数。
对于字符串,其中间不允许出现结束符(’\0’);具体操作数的长度可以根据当前操作确定其长度,无需通过PktLength字段获取。
对于类型(Type)字段中的设置配置信息和获取配置信息,其数据字段全部使用字符串;对于系统命令操作中,写MAC、获取Product ID和写PIN操作使用的是其定长的MAC为6个字节、Product ID为4个字节和PIN的8个字节。
基本配置命令指设置配置信息和获取配置信息类型的TDDP报文中TDDP数据所包含的内容,它全部由字符串组成。
当设置配置信息时,其字符串的格式要求为:
Tddp数据包的数据字段可以包含多个Tddp命令,每个命令占一行(多个命令要用回车换行符\r\n隔开),如Tddp包的数据字段可以为字符串:”lan_ip192.168.3.199\r\n lan_msk 255.255.255.0\r\n”,意思为设置路由器LAN口的IP地址和子网掩码。
当获取配置信息时,其字符串的格式要求为:
只支持单条命令,如“lan_ip”或“wan”,解析时将字符串作为单个串进行命令的匹配。
特殊配置命令:
除以下列出的特殊命令需填充数据外,其他特殊命令无TDDP数据。
1.写MAC(CMD_CONFIG_MAC)
格式(字节):六个字节
回复方无需填充数据
2.写PIN(CMD_CONFIG_PIN)
格式(字节):8个字节
回复方无需填充数据
3.查询WAN口的物理连接检测(CMD_WAN_PHLINK)
格式(字符串):wan_ph_link index value\r\n...
index指定WAN口,从1开始;value指定链接状态,0为未链接,1为已链接。
请求方无需填充数据
4.查询WAN口的逻辑链接状态(CMD_WAN_LOGICLINK)
格式(字符串):wan_logic_link index value\r\n...
index指定WAN口,从1开始;value指定链接状态,0为未链接,1为已链接,2为连接中。
请求方无需填充数据
5.进行WAN口的链接操作(CMD_WAN_CONN)
格式(字符串):wan_conn index value
每个报文只包含一个命令;index指定WAN口,从1开始;value指定链接操作,0为关闭链接,1为启动链接
回复方无需填充数据
TDDP协议的操作
校验:
为防止TDDP包的篡改,同时便于实现和整合,TDDP包的校验使用现有的MD5算法的接口。MD5校验整个数据包的内容,包括TDDP报头和TDDP数据。MD5算法的选择可以作为合法报文的标志。
加密
为保护TDDP数据内容的泄露,需要进行加密处理。为了便于实现和整合,加密使用DES算法。加密的内容包括TDDP数据。因此,此加密不包含对摘要的加密。
密钥的生成方式为:登录路由器的用户名和密码的字符串链接起来算MD5,取摘要的前8字节。如用户名是admin,密码是123,算MD5的串为admin123。这样的话,用户登录用户名或密码改变,则密钥改变,从而验证用户的合法性。
报文的构建:
在步骤S1中,内存清零:将发送的缓冲清0,防止无效的初始化数据的使用。
在步骤S2中,除长度和摘要外,对TDDP报头各字段赋值:
当需要发送数据包时,TDDP头部中的除长度和摘要字段的值外,其他信息都是能够确定的,所以对其各字段进行赋值。
在步骤S3中,TDDP数据的构建:
根据实际应用需求,构建TDDP数据。
在步骤S4中,附加填充位:为满足DES加密的长度是8的整数倍的要求,如果TDDP数据的长度不能被8整除,则在TDDP数据的尾部添加填充位。填充位的值为0x00。
在步骤S5中,为长度字段赋值:根据附加填充位后TDDP数据的长度为TDDP报头的长度字段赋值。
在步骤S6中,计算TDDP包的摘要,存储于摘要字段:
对整个报文计算摘要(DIGEST),将摘要的内容存放于TDDP报头的Digest字段。整个报文摘要的计算包括了报头的Digest字段,所以在对摘要赋值前,其值一定是全零(0x00)。
在步骤S7中,判断数据长度是否大于零:
由于DES加密只是对TDDP数据进行加密,而存在TDDP数据长度是零的情况。因此,当长度为零时,不进行加密处理,否则进行加密处理。此时,TDDP数据的长度一定能被8整除。
DES加密:
使用事先约定好的DES加密算法对TDDP数据进行加密。
报文的解析:
在步骤S10中,接收TDDP包,判断TDDP数据长度是否大于零:
判断TDDP报头的长度(PktLength)字段所指定的TDDP数据的长度,如果是零,则无需进行解密处理;如果大于零(一定是8的整数倍),则需要进行解密处理。
DES解密:使用事先约定好的DES密钥进行解密。
在步骤S20中,提取摘要,并清零:
为校验报文的摘要是否正确,需要先将报文中的摘要提取出来,并清零(0x00)。这样就可以对整个报文计算信息摘要。
在步骤S30中,计算摘要并匹配:
通过重新计算所获取的摘要和之前提的摘要进行匹配,确定报文内容是否被篡改。
报文的处理:
当解密、校验成功后,就可以进行报文的实际应用和处理。此时需要注意的问题是TDDP数据的有效长度的计算。
请参阅图1,为本发明实施例提供的网络设备的控制方法的实现流程,其包括以下步骤:
在步骤S100中,网络设备接收客户端广播的包含有获取网络设备ID号的TDDP发现报文;
在步骤S200中,符合要求的网络设备以自身的设备ID单播TDDP响应报文;
在本发明实施例中,在步骤S200之后,还包括以下步骤:
客户端单播发出心跳包给网络设备;如果发送N个心跳包,客户端都未收到网络设备TDDP回复,则客户端认为网络设备不在线,客户端提示用户网络设备失去连接。其中,根据网络情况来设置N的个数。
在步骤S300中,网络设备接收客户端发送的包含有控制命令的TDDP请求包;
在步骤S400中,网络设备根据所述TDDP请求包中的控制命令,执行相应的控制操作。
请参阅图2,为本发明实施例提供的路由器的参数配置方法的实现流程,其包括以下步骤:
在步骤S101中,路由器接收客户端广播的包含有获取路由器ID号的TDDP发现报文;
在步骤S102中,符合要求的路由器以自身的ID号单播TDDP响应报文;
在本发明实施例中,所述路由器采用DES加密算法对包含有自身ID号的TDDP应答包进行加密;并将加密后的包含有自身ID号的TDDP应答包发送给客户端;客户端解密所述包含有自身ID号的TDDP应答包,若解密不成功,则客户端向路由器发送结束本次操作的TDDP数据包。
在步骤S103中,路由器接收客户端发送的包含有设置所述ID号对应的路由器配置信息的TDDP请求包;
在步骤S104中,路由器根据所述配置信息对路由器的相关参数进行设置;
在步骤S105中,路由器向客户端返回包含有参数设置成功的TDDP回复包。
作为本发明一优选实施例,为检测路由器是否在线,在步骤S102之后,还包括以下步骤:
客户端单播发出心跳包给路由器;如果发送N个心跳包,客户端都未收到路由器TDDP回复,则客户端认为路由器不在线,客户端提示用户路由器失去连接。其中,根据网络情况来设置N的个数。
作为本发明另一优选实施例,所述方法还包括以下步骤:
路由器接收客户端发送的包含有设置MAC的TDDP请求包;
路由器完成写MAC操作,并向客户端返回操作成功的TDDP回复包。
作为本发明又一优选实施例,所述方法还包括以下步骤:
路由器接收客户端发送的包含有设置PIN的TDDP请求包;
路由器完成写PIN操作,并向客户端返回操作成功的TDDP回复包。
请参阅图3,为本发明实施例提供的网络设备的控制系统的结构。为了便于说明,仅示出了与本发明实施例相关的部分。所述网络设备的控制系统包括:接收模块100、发送模块200、以及执行模块300。所述网络设备的控制系统可以是内置于网络设备中的软件单元、硬件单元或者是软硬件结合的单元。
接收模块100接收客户端广播的包含有获取网络设备ID号的TDDP发现报文;发送模块200用于符合要求的网络设备以自身的设备ID单播TDDP响应报文;接收模块100还用于接收客户端发送的包含有控制命令的TDDP请求包;执行模块300根据所述TDDP请求包中的控制命令,执行相应的控制操作。
当所述网络设备为路由器时,请参阅图4,为本发明另一实施例提供的网络设备的控制系统的结构。为了便于说明,仅示出了与本发明实施例相关的部分。所述网络设备的控制系统包括:接收模块102、ID号获取模块104、参数设置模块106、以及发送模块108。所述网络设备的控制系统可以是内置于网络设备中的软件单元、硬件单元或者是软硬件结合的单元。
接收模块102接收客户端广播的包含有获取路由器ID号的TDDP发现报文;ID号获取模块104获取路由器ID号,符合要求的路由器通过发送模块108以自身的ID号单播TDDP响应报文;接收模块102接收客户端发送的包含有设置所述ID号对应的路由器配置信息的TDDP请求包;参数设置模块106根据所述配置信息对路由器的相关参数进行设置;并通过发送模块108向客户端返回包含有参数设置成功的TDDP回复包。
作为本发明一优选实施例,所述系统还包括:MAC写入模块。
所述MAC写入模块,用于接收客户端发送的包含有设置MAC的TDDP请求包,完成写MAC操作,并向客户端返回操作成功的TDDP回复包。
作为本发明另一优选实施例,所述系统还包括:PIN写入模块。
所述PIN写入模块,用于接收客户端发送的包含有设置PIN的TDDP请求包,完成写PIN操作,并向客户端返回操作成功的TDDP回复包。
综上所述,本发明实施例采用TDDP协议完成对网络设备的控制,由于TDDP协议使用应答模式来完成客户端与网络设备之间交互,能够随时中断操作,因此给网络设备的控制带来灵活处理。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。