另一个Routeros API Delphi客户端。支持TLS和Routeros 6.43+ API登录方法的API。
官方API文档:https://wiki.mikrotik.com/wiki/manual:api
Mikrotik论坛主题:https://forum.mikrotik.com/viewtopic.php?f=9&t=31555555555
这是Delphi的Mikrotik Routeros API客户端的实现。它支持对路由器的并行请求执行,并具有类似数据库的接口以易于使用。
RouteroSAPI单元包含两个类的定义,您需要从Delphi程序中使用API协议。
该类封装了通过Routeros API协议与路由器建立连接的属性和方法。
此功能连接到路由器并执行登录过程。如果登录成功,它将返回True ,否则为错误。
对路由器进行查询。请求是一系列字符串,首先是命令,而其他是参数。如果GetAllafterQuery为True ,则发送查询后将执行trosapiresult.getall 。
如果您不需要从查询中收到任何输出,请使用此方法。它只是调用查询功能,然后释放返回的对象。
使用此属性,您可以为网络操作(以毫秒)设置超时值。
此仅阅读属性包含发生最后错误的文本描述。
与路由器断开连接。
该课程使您有能力与查询返回的数据一起工作。每个命令执行都是在其trosapiresult对象中“隔离”的,因此您可以通过调用trosapiclient.Query并接收几个trosapiresult对象来进行并行请求。
在当前句子中返回名称参数的值(用API词)。获得结果的首选方法是: apiresult ['parmname']而不是apiresult.valuebyname('parmname') 。您可以使用和不带有领先的'='字符( apiresult ['advery']和apiresult ['= address']返回相同结果)。
返回查询结果的当前句子(类型为trosabisentence)。
从路由器收到一句话。如果等待参数为真,函数将等到收到句子。如果等待是错误的,并且目前没有收到句子,则功能返回false 。当您需要处理其他用户的操作时,当在GUI中执行无限命令(例如'listing')时,这很有帮助:您应该定期用wait = false调用getone ,如果否定结果,则只需暂时做其他事情即可。
接收到“!完成”的所有句子,然后返回true (或在超时的情况下)。
致电Getall后返回接收句子的数量。
如果查询结果中有更多句子,则返回true 。
如果在GetAll期间有陷阱,则返回为True
如果在Getone中收到了“!完成”句子,返回true
转移到Getall中收到的下一个句子
取消当前命令执行。
可以在发行部分下载示例Apitest应用程序:https://github.com/chupaka/delphi-routeros-api/releases
首先,我们应该声明一个变量并创建一个trosapiclient的实例:
var
RouterOS: TRosApiClient;
RouterOS := TRosApiClient.Create;现在,我们连接到路由器并执行登录过程:
if RouterOS.Connect( ' 192.168.0.1 ' , ' admin ' , ' password ' ) then
begin
// we are connected successfully
end
else
begin
// an error occured; text error message is in LastError property
end ;所有查询均通过调用TrosapicLient的查询功能来完成。它返回一个trosapiresult的实例,从中获取了所有数据。
var
Res: TRosApiResult;
Res := RouterOS.Query([ ' /system/resource/print ' ], True);Res := ROS.Query([ ' /ip/arp/print ' , ' ?interface=ether2 ' ], True);
while not Res.Eof do
begin
SomeProcessingFunction(Res[ ' .id ' ], Res[ ' address ' ]);
Res.Next;
end ;
Res.Free;首先,将计时器放在表单上并将其命名为tmrlisten ,设置为false 。然后,我们进行查询并启用计时器:
ResListen := ROS.Query([ ' /log/listen ' ], False);
tmrListen.Enabled := True;然后,我们检查有关计时器事件的新数据:
procedure TForm1.tmrListenTimer (Sender: TObject);
begin
repeat
if not ResListen.GetOne(False) then Break;
if ResListen.Trap then
begin
ShowMessage( ' Trap: ' + ROS.LastError);
Break;
end ;
if ResListen.Done then
begin
ShowMessage( ' Done ' );
ResListen.Free;
tmrListen.Enabled := False;
Break;
end ;
Memo1.Lines.Add(ResListen[ ' time ' ] + ' : ' + ResListen[ ' message ' ]);
until False;
end ;有关讨论和建议,您可以查看Mikrotik论坛线程Routeros API Delphi客户端