我正在尝试设计一个应用程序,可以使用与 Web 界面相同的端点以编程方式与我的路由器进行通信(TP-Link 网站上有 a demo)。我的路由器是 TP-Link TD-W8980,如果这很重要的话。
该格式似乎很难破译。这是一个获取我的应用程序状态部分的数据的请求。这样可以从路由器获得有效的响应,但我不知道为什么!
我对回复中的
#0,0,0,0,0,0#0,0,0,0,0,0]
部分感到特别困惑。这是我唯一没有解决的部分,但我想我记得读过它与堆栈有关?!?
[SYS_MODE#0,0,0,0,0,0#0,0,0,0,0,0]0,1
mode
[LAN_HOST_CFG#1,0,0,0,0,0#0,0,0,0,0,0]1,1
DNSServers
[WAN_DSL_INTF_CFG#1,0,0,0,0,0#0,0,0,0,0,0]2,8
upstreamCurrRate
downstreamCurrRate
upstreamMaxRate
downstreamMaxRate
upstreamNoiseMargin
downstreamNoiseMargin
upstreamAttenuation
downstreamAttenuation
[IGD_DEV_INFO#0,0,0,0,0,0#0,0,0,0,0,0]3,3
softwareVersion
hardwareVersion
upTime
[LAN_IP_INTF#0,0,0,0,0,0#0,0,0,0,0,0]4,2
IPInterfaceIPAddress
X_TPLINK_MACAddress
[LAN_HOST_ENTRY#0,0,0,0,0,0#0,0,0,0,0,0]5,4
leaseTimeRemaining
MACAddress
hostName
IPAddress
[WAN_PPP_CONN#0,0,0,0,0,0#0,0,0,0,0,0]6,4
enable
connectionStatus
externalIPAddress
DNSServers
如果有帮助,大写的名称(例如
SYS_MODE
)是该部分的名称。 ]
后面的数字是一个计数器,表示节号(节可以按任何顺序)。 ,
后面的最后一个数字是本节中后面的参数数量。
每个部分还有请求类型。在上面的示例中,URL 为
http://192.168.1.1/cgi?1&1&1&1&5&5&5
。如您所见,两种主要请求类型是 1
和 5
。
这是来自服务器的示例响应。正如您所看到的,某些部分可以多次返回,这使得六个零中的第一个数字每次都会递增。
[0,0,0,0,0,0]0
mode=DSL
[1,0,0,0,0,0]1
DNSServers=x.x.x.x,x.x.x.x
[1,0,0,0,0,0]2
upstreamCurrRate=928
downstreamCurrRate=3072
upstreamMaxRate=1068
downstreamMaxRate=3104
upstreamNoiseMargin=60
downstreamNoiseMargin=57
upstreamAttenuation=295
downstreamAttenuation=546
[0,0,0,0,0,0]3
softwareVersion=0.6.0 1.3 v000e.0 Build 131012 Rel.51720n
hardwareVersion=TD-W8980 v1 00000000
upTime=x
[1,1,0,0,0,0]4
IPInterfaceIPAddress=192.168.1.1
X_TPLINK_MACAddress=xx:xx:xx:xx:xx:xx
[1,0,0,0,0,0]5
leaseTimeRemaining=-1
MACAddress=xx:xx:xx:xx:xx:xx
hostName=X
IPAddress=192.168.1.2
[2,0,0,0,0,0]5
leaseTimeRemaining=-1
MACAddress=xx:xx:xx:xx:xx:xx
hostName=X
IPAddress=192.168.1.4
[3,0,0,0,0,0]5
leaseTimeRemaining=-1
MACAddress=xx:xx:xx:xx:xx:xx
hostName=X
IPAddress=192.168.1.11
[4,0,0,0,0,0]5
leaseTimeRemaining=-1
MACAddress=xx:xx:xx:xx:xx:xx
hostName=X
IPAddress=192.168.1.5
[1,2,1,0,0,0]6
enable=1
connectionStatus=Connected
externalIPAddress=x.x.x.x
DNSServers=x.x.x.x,x.x.x.x
[2,1,1,0,0,0]6
enable=0
connectionStatus=Unconfigured
externalIPAddress=0.0.0.0
DNSServers=0.0.0.0,0.0.0.0
[3,1,1,0,0,0]6
enable=0
connectionStatus=Unconfigured
externalIPAddress=0.0.0.0
DNSServers=0.0.0.0,0.0.0.0
[error]0
如果对此格式有任何解释以及它是否出现在网络上的其他位置,我将不胜感激。我以前从未见过这样的系统!
此 API 往往因型号而异。 TP-Link 对它进行了很多更改,据我所知,还没有相关文档。较新的版本是基于 JSON 的并且更具可读性,但是这个版本很容易在他们的旧路由器中遇到。
您能做的最好的事情就是尝试通过查看一些在前端使用此 API 的 JS 文件来对其进行逆向工程。其中大多数都没有缩小,甚至应该包含注释。
从我的基本理解来看,这些请求体是这样的:
[WAN_PPP_CONN#1,1,1,0,0,0#0,0,0,0,0,0]0,18
key=value
key=value
[WAN_IP_CONN#1,1,1,0,0,0#0,0,0,0,0,0]0,12
key=value
key=value
key=value
可以这样解释:
[MIB_TAG_NAME#MIB_INDEX_STACK#UNKNOWN]TAG_INDEX,NUMBER_OF_FIELDS
key=value
key=value
[MIB_TAG_NAME_2#MIB_INDEX_STACK#UNKNOWN]TAG_INDEX,NUMBER_OF_FIELDS
key=value
key=value
key=value
按照我的理解解释这些参数:
MIB_TAG_NAME => 配置“目录”的名称。每个都有自己的参数
MIB_INDEX_STACK => 这似乎是所有索引字段的索引堆栈。设备内部拥有一个 MIB(管理信息库),它本身包含嵌套字段,有时还包含索引字段(在数组中)。一个简单的示例可以是 WAN 配置条目或 TR069 中的 WANDevices。每个 WANDevice 拥有 N 个 WANConfigurations,它们本身可以拥有 K 个参数。该索引堆栈允许在涉及这些索引字段的树中进行遍历。一般来说,堆栈的最后一个数字是唯一重要的,因为它会在您创建 WAN 或远程管理条目时递增。
未知 => 我不知道第二个堆栈的功能,并且从来不需要任何东西。
TAG_INDEX => 您可以在同一个HTTP请求中为多个目录设置参数。但是,您必须在插入目录时为其建立索引。请求正文中的第一个目录是 0,第二个目录是 1,等等..
NUMBER_OF_FIELDS => 您为此目录设置的参数数量。通常您可以根据需要删除它们,但必须调整此数字。
key,value => “目录”接受的参数。
对于任何糟糕的英语或格式,我们深表歉意。第一次使用这里。