通过API (Application Programmable Interface)接口,用户可以创建自定义的软件解决方案,与RouterOS雷电竞app下载官方版苹果进行通信,实现信息收集、配置调整和路由器管理。l雷竞技API严格遵循命令行界面(CLI)的语法。它可以用来创建转换或自定义配置工具,以帮助使用RouterOS轻松运行和管理路由器。l雷竞技
在尝试建立API连接之前,必须启用API服务。默认情况下,API使用TCP:8728和TCP:8729(安全)。
API-ssl服务能够在两种模式下工作——带证书和不带证书。在这种情况下,没有使用证书/ ip服务那么匿名迪菲-赫尔曼密码必须用来建立连接。如果使用了证书,则可以建立TLS会话。
与路由器的通信是通过发送句子和接收一个或多个句子来完成的。句子是一个以零长度单词结尾的单词序列。单词是句子的一部分,以某种方式编码——编码长度和数据。通信通过向路由器发送语句并接收对所发送语句的回复来实现。使用API发送到路由器的每个句子都应该包含一个命令,作为第一个单词,然后是没有特定顺序的单词,句子的结尾用一个零长度的单词标记。当路由器接收到一个完整的句子(命令词,没有或多个属性词,零长度词)时,它被计算并执行,然后形成并返回一个应答。
单词是句子的一部分。每个单词都必须以特定的方式编码——单词长度后跟单词内容。单词的长度应该以将要发送的字节数的形式给出。
单词的长度编码如下:
一般来说,单词可以这样描述<<编码字长><字内容> >。字内容可分为5部分:命令字,属性词,API属性字。查询词,和回复的话
句子中的第一个单词必须是命令,后跟属性词和零长度词或结束词。命令字的名称应该以“/”开头。命令的名称紧跟CLI,空格替换为'/'。有些命令是特定于API的;
命令字结构的严格顺序:
API专用命令:
登录取消
命令字内容示例:
/登录
/ user /主动/听
/ / vlan /删除界面
/系统/重新启动
每一个命令字有自己的属性词取决于内容。
属性词结构按此顺序由5部分组成:
值可以容纳多个平等的符号的价值属性词因为单词的编码方式。
Value可以为空。
没有编码长度前缀的示例:
=地址= 10.0.0.1
= = iu = c3Eeg名称
= disable-running-check =是的
属性词和API参数的顺序并不重要,也不应该依赖
API属性字结构严格按顺序排列:
目前,唯一这样的API属性是标签。
如果句子中包含API属性字标记后,路由器对该标记的句子的回复中返回的每个句子都将被标记为相同的标记。
句子可以具有限制其作用域的附加查询参数。详细的解释见查询部分。
使用查询词属性的句子示例:
/interface/print ?type=ether ?type=vlan ?#|!
查询词的顺序很重要
它仅由路由器作为对从客户端接收到的完整句子的响应而发送。
API语句是使用API进行交流的主要对象。
长度为零的词结束句子。如果不提供,路由器将不会开始评估发送的单词,并将所有输入视为同一句子的一部分。
注意:每个命令和响应都以一个空单词结尾。
v6.43之后的登录方法:
的打印命令接受限制返回语句集的查询词。
正则表达式在API中不受支持,所以不要尝试使用~象征
例子:
/interface/print ?type=ether ?type=vlan ?#|
/ ip /线路/打印吗? = >发表评论
的打印命令可以返回SNMP中可用的属性的OID值。
在控制台中,可以通过运行'print OID '命令来查看OID值。在API中,这些属性的名称以“”结尾。Oid ",并且可以通过将它们的名称添加到'.proplist'的值中来检索。一个例子:
当由于某种原因API语句失败时,将发送陷阱作为返回消息属性和在某些情况下类别论点。
当API语句失败时,将返回一些通用消息或来自所使用的内部进程的消息,以提供有关失败的更多细节
<<< /ip/address/add <<< =address=192.168.88.1 <<< =interface=asdf <<< >>> !trap >>> =category=1 >>> =message=input不匹配任何interface的值
如果是一般错误,则对其进行分类并返回错误类别。此属性的可能值为
一个简单的Python3中的API客户端
示例输出:
debian@localhost:~/api-test$ ./api.py 10.0.0.1 admin " << /login <<< >>> !done >>> =ret=93b438ec9b80057c06dd9fe67d56aa9a >>> <<< /login <<< =name=admin <<< =response=00e134102a9d330dd7b1849fedfea3cb57 <<< >>> !done >>> /user/getall <<< /user/getall <<< < >>> !re >>> =。id = * 1 > > > =禁用=没有> > > = name =管理> > > =组=全部> > > =地址= 0.0.0.0/0 > > > =子网掩码= 0.0.0.0 >>> >>> ! 完成> > >
不同语言的API实现,由不同的源提供。它们没有任何特定的顺序。