【Go语言小工具】Mikrotik批量替换程序

news/2025/10/3 1:55:54/文章来源:https://www.cnblogs.com/xiangxisheng/p/19124171

【Go语言小工具】Mikrotik批量替换程序

Go语言非常适合做一些命令行小工具,编译下面这个代码生成golang-mikrotik-replace.exe文件

package mainimport ("flag""fmt""net/url""os""strings""github.com/go-routeros/routeros"
)func main() {// 默认 URL 来自环境变量defaultURL := os.Getenv("MIKROTIK_URL")if defaultURL == "" {defaultURL = "//user:pass@127.0.0.1:8728/ip/address"}// 命令行参数rawURL := flag.String("url", defaultURL, "Mikrotik API URL (格式: //user:pass@host:port/path)")// 覆盖选项overrideUser := flag.String("user", "", "覆盖用户名")overridePass := flag.String("pass", "", "覆盖密码")overrideHost := flag.String("host", "", "覆盖整个 host (hostname:port)")overrideHostname := flag.String("hostname", "", "覆盖 hostname,不改端口")overridePort := flag.String("port", "", "覆盖端口,不改 hostname")overridePath := flag.String("path", "", "覆盖路径 (例如 /ip/address)")// 逻辑参数field := flag.String("field", "address", "需要替换的字段")search := flag.String("search", "", "要查找的字符串")target := flag.String("target", "", "替换后的字符串")debug := flag.Bool("debug", false, "打印最终 URL 调试信息")flag.Parse()// 解析 URLparsedURL, err := url.Parse(*rawURL)if err != nil {panic(err)}// 覆盖 user/passif *overrideUser != "" {parsedURL.User = url.UserPassword(*overrideUser, *overridePass)} else if *overridePass != "" && parsedURL.User != nil {parsedURL.User = url.UserPassword(parsedURL.User.Username(), *overridePass)}// 覆盖 Host/Hostname/Portif *overrideHost != "" {// 覆盖整个 host:portparsedURL.Host = *overrideHost} else {// 覆盖 hostnameif *overrideHostname != "" {port := parsedURL.Port()if port != "" {parsedURL.Host = fmt.Sprintf("%s:%s", *overrideHostname, port)} else {parsedURL.Host = *overrideHostname}}// 覆盖 portif *overridePort != "" {hostOnly := parsedURL.Hostname()parsedURL.Host = fmt.Sprintf("%s:%s", hostOnly, *overridePort)}}// 覆盖 pathif *overridePath != "" {parsedURL.Path = *overridePath}// 拆分 user/passuser := ""pass := ""if parsedURL.User != nil {user = parsedURL.User.Username()pass, _ = parsedURL.User.Password()}apiAddr := parsedURL.HostrunPath := parsedURL.Pathif *debug {fmt.Println("DEBUG INFO:")fmt.Println("  User:", user)fmt.Println("  Pass:", pass)fmt.Println("  Host:", apiAddr)fmt.Println("  Hostname:", parsedURL.Hostname())fmt.Println("  Port:", parsedURL.Port())fmt.Println("  Path:", runPath)fmt.Println("  Field:", *field)fmt.Println("  Search:", *search)fmt.Println("  Target:", *target)fmt.Println()}// 连接 Mikrotik APIc, err := routeros.Dial(apiAddr, user, pass)if err != nil {panic(err)}defer c.Close()re, err := c.Run(runPath + "/print")if err != nil {panic(err)}// 遍历结果for _, sentence := range re.Re {id := sentence.Map[".id"]source := sentence.Map[*field]replaced := strings.ReplaceAll(source, *search, *target)if source != replaced {fmt.Printf("替换 %s -> %s\n", source, replaced)_, err = c.Run(runPath+"/set",fmt.Sprintf("=.id=%s", id),fmt.Sprintf("=%s=%s", *field, replaced),)if err != nil {panic(err)}}}
}

首先设置环境变量MIKROTIK_URL=//user:pass@127.0.0.1:8728/ip/address
然后通过下面的命令行示例代码即可执行操作

golang-mikrotik-replace.exe -hostname 100.100.0.113 -path /ip/address -field address -search 172.17.0. -target 172.18.0.
golang-mikrotik-replace.exe -hostname 100.100.0.113 -path /ip/route -field gateway -search 172.17.0. -target 172.18.0.
golang-mikrotik-replace.exe -hostname 100.100.0.113 -path /ip/firewall/nat -field to-addresses -search 172.17.0. -target 172.18.0.
golang-mikrotik-replace.exe -hostname 100.100.0.113 -path /ip/firewall/nat -field dst-address -search 172.17.0. -target 172.18.0.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站开发项目答辩视频国家信息公示网查营业执照年报

文章目录正文git 流程:正常:查看:回滚删除:远程:分支:底层:学习网站:廖雪峰git教程 ,笔记不断更新中~ 正文 git 流程: 正常: 项目目录下 git i…

龙华网站-建设深圳信科外面网站怎么做

一直有一个想法,感觉自己很多基础算法不是很扎实,想要找个机会写一些算法的整理,顺便自己总结一些实用的模板。 最近偶然在训练赛中连续做了2道思维矩阵快速幂的题目,碰巧有时间,就以矩阵快速幂作为这个系列博客的开始…

电子商务网站建设运营网站 加域名

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…

网站关键词优化费用福田蒙派克e质量怎么样

前期准备 三台服务器,服务器使用的是 centos7 mysql-5.7.24-linux-glibc2.12-x86_64 安装包 使用是版本是 mysql-5.7.24 数据库安装 将 mysql 安装包上传到三台服务器上,我使用 FlashFXP 作为上传工具 解压安装包 tar -zxvf mysql-5.7.24-linux-glibc…

做电焊加工的网站wordpress首页幻灯片尺寸

松哥周末抽空给 Spring Security 系列也录制了一套视频,目录如下:感兴趣的小伙伴戳这里-->Spring BootVue微人事视频教程今天的话题来自一个小伙伴在微信上的提问:看到这个问题,松哥忽然想到我自己之前写过 Spring BootSwagger…

网站建设与运营课程总结qq音乐的网站建设信息

Java框架可以变,基础不会变。 Java 是一门高级编程语言,由 Sun Microsystems(后来被 Oracle 收购)所开发,于 1995 年首次发布。Java 的设计目标是“一次编写,到处运行”(Write Once, Run Anywhere),也被称为 WORA。这意味着可以在不同的操作系统和硬件平台上运行同样…

US$34 Super Auto Decoder and Pick Tool KW1 (Left)

Super Auto Decoder and Pick Tool KW1 (Left) Package includes:1pc x Super Auto Decoder and Pick Tool KW1 (Left) Pictures of Super Auto Decoder and Pick Tool KW1 (Left)Super Auto Decoder and Pick Tool KW…

贡井区建设局网站久久建工集团

Problem: 百亿富翁 文章目录 思路解题方法复杂度Code 思路 这是一个单调栈的问题。单调栈是一种特殊的栈结构,它的特点是栈中的元素保持单调性。在这个问题中,我们需要找到每个元素左边和右边第一个比它大的元素。我们可以使用一个单调递增的栈来解决这个…

做网站的岗位好吗人才招聘网最新招聘

实模式:(即实地址访问模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容处理器(CPU)的一种操作模式。实模式被特殊定义为20位地址内存可访问空间上,这就意味着它的容量是2的20次幂&#xff08…

网站的版面布局网站建设与熊掌号未来的关系

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持…

公司网站优化推广电子商务营销推广

数据检索算法是指从数据集合(数组、表、哈希表等)中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文发布 三元搜索(Ternary Search)的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algo…

创意网站交互wordpress 备案信息修改

目录 指针的使用 strlen的模拟实现 传值调用和传址调用 数组名的理解 使用指针访问数组 一维数组传参的本质 冒泡排序 个人主页(找往期文章):我要学编程(ಥ_ಥ)-CSDN博客 指针的使用 strlen的模拟实现 库函数strlen的功能是求字符串…

10.2刷题计划

力扣10题 正则表达式匹配力扣22题 括号生成 z是代表左括号的数量,y代表右括号的数量,k代表每个括号的最大数量 设置一个temp,存储递归中的字符串 返回条件:左括号和右括号数量均到达k,将temp压入答案中 每次递归…

云南省建设厅网站人员查询湛江建站公司

学习一门新的编程语言可能是一个具有挑战性的过程,但通过一些系统的方法,可以大大加快这个过程。 目录 第一步:通过书籍和视频课程掌握基本语法1. **学习编程语言的基础知识**2. **掌握字符串处理**3. **掌握正则表达式和解析器**4. **掌握面…

US$348 Turbo Decoder HU100RV2 for BMW F Series

Turbo Decoder HU100RV2 for BMW F SeriesPackage Including:1pc x Turbo Decoder HU100RV2 for BMW F Series Pictures of Turbo Decoder HU100RV2 for BMW F SeriesTurbo Decoder HU100RV2 for BMW F Series, now on…

树莓派搭建NAS之二:安装OpenMediaVault(OMV)

安装OpenMediaVault(OMV)安装的树莓派必须没有桌面才行,有桌面先提示安装失败。在终端运行下面的命令开始安装: wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/instal…

dp 总结 1

dp 总结 1 闲来无事, 把刚学明白的 dp 笔记整理一下. shout out to professor Adzlpxsn. 基本的, 状态, 转移, 方程 状态 一句话概况即为当前的属性. 比如说, 贝贝现在是 \(30\) 岁, 发了 \(0\) 张专辑, 我们就可以说 …

绍兴建设局网站网址查询器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、使用步骤1.安装supervisor-win2.配置supervisord3.配置program4.启动supervisord.exe5.supervisorctl.exe管控 二、后台启动总结 前言 windows使用supervi…

网站做行测题wordpress首页显示内容设置

WinCC Professional V16 支持客户机/服务器架构,但目前只支持单个服务器或单对冗余服务器/多个客户机的模式,还不能支持像WinCC V7.5 SP1中的多个服务器/多个客户机的分布式架构。 组态步骤如下: 1. 在项目中分别添加服务器站和客户机站&…

盛盾科技网站建设简洁高端网页

很清爽的 abstract 给出链接 前面的背景意义 其实 是通用的 这里替大家 整理一吓吓 1 缺陷分类在钢铁表面缺陷检测中 有 意义。 2 大多数缺陷分类模型都是基于完全监督的学习, 这需要大量带有图像标签的训练数据。 在工业场景中收集有缺陷的图像是非常困难…