Winbox 是基于 windows下远程管理 ROS的软件,提供直观方便的图形界面。用它能登陆路由器,这个路由器是软路由ROUTEOS制作的,用Winbox登陆后,就可以配置路由器了,用这个软件便于配置路由器。Winbox控制台使用TCP8291端口,在登陆到路由器后可以通过Winbox控制台操作MikroTik路由器的配置并执行与本地控制台同样的任务。
基于ros 路由的配置,我们可以对ip进行数据解析分析服务,对ros产生的ip详细dns日志收录,对流量记录等。
使用winbox:左边是工具的使用,我们可以用
链接:https://pan.baidu.com/s/1kgJ_RougILQzIQUGj-ljdA
提取码:bqlx
Manual:API - MikroTik Wiki ROS 是 一个比较流行的软路由系统,它的强大在于它的高度定制性,它提供了应用程序编程使用的API接口,是它应用更加灵活,我们可以自己开发软件或WEB程序来操控ROS,比较实用的例子就是当用ROS管理小区网络时,我们用自己写的软件来管理上网账号,安全又方便。下面是官网,已经简单命令的使用。
(这里的api是需要通过命令输入查询才行)
这里我们通过命令可以去跑数据,那如何把这个数据通过api读取到我们程序来呢?
git地址
https://github.com/GideonLeGrange/mikrotik-java
可以吧代码拉到本地看看源码。
如何集成到springboot程序里面?我们只需要一个maven包就行了。
<dependency>
<groupId>me.legrange</groupId>
<artifactId>mikrotik</artifactId>
<version>3.0.7</version>
</dependency>
与Ros通信至少需要哪些参数?
host: {}, port: {}, rosUserName: {}, rosPassword: {},Socket:{}
获取连接:
/**
* 获取rosconnect 连接
*
* @return
*/
public static ApiConnection getRosConnection() {
try {
//建立连接超时时间限制
ApiConnection con = ApiConnection.connect(SocketFactory.getDefault(), host, ApiConnection.DEFAULT_PORT, 30000);
//命令执行超时时间限制
con.setTimeout(500000);
con.login(rosUserName, rosPassword);
return con;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
执行命令:
public static List<Map<String, String>> execute(ApiConnection conn, String command) {
try {
return conn.execute(command);
} catch (MikrotikApiException e) {
e.printStackTrace();
}
return null;
}
测试数据已经可以拿到了:
工具类。需要测试换成你自己的地址。
package com.nanianxiatian.springboot.util;
import me.legrange.mikrotik.ApiConnection;
import me.legrange.mikrotik.ApiConnectionException;
import me.legrange.mikrotik.MikrotikApiException;
import javax.net.SocketFactory;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
* <p>
* ros data
*
* @author yangchang
* @since 2022-03-06
*/
public class RosUtils {
/**
* host
*/
private static String host = "116.6.2.251";
private static int port = 8291;
private static String rosUserName = "admin";
private static String rosPassword = "admin";
/**
* 获取rosconnect 连接
*
* @return
*/
public static ApiConnection getRosConnection() {
try {
//建立连接超时时间限制
ApiConnection con = ApiConnection.connect(SocketFactory.getDefault(), host, ApiConnection.DEFAULT_PORT, 30000);
//命令执行超时时间限制
con.setTimeout(500000);
con.login(rosUserName, rosPassword);
return con;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static List<Map<String, String>> execute(ApiConnection conn, String command) {
try {
return conn.execute(command);
} catch (MikrotikApiException e) {
e.printStackTrace();
}
return null;
}
public static void logout(ApiConnection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (ApiConnectionException e) {
// log.error("", e);
}
}
public static void main(String args[]) {
//执行命令ros脚本命令
String command = "/ip/firewall/address-list/print";
ApiConnection connection = getRosConnection();
List<Map<String, String>> existsList = execute(connection, String.format(command));
List<String> list = existsList.stream().map(m -> m.get("address")).collect(Collectors.toList());
logout(connection);
System.out.println("其他");
}
}
拿到数据就可以愉快的操作了。
喜欢记得一键三连。