当前位置: 首页 > news >正文

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

【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.gsyq.cn/news/15040.html

相关文章:

  • 树莓派搭建NAS之二:安装OpenMediaVault(OMV)
  • 2025年10月3日
  • 南华 NHXJ-02 汽车悬架检验台:实用的技术特性与实操应用指南
  • Spring Boot Logback:实现定时任务日志与业务日志隔离 - Higurashi
  • 马云归来,“新零售”不死 - 指南
  • ChIPBase network菜单 生成tf的excel ,用于构建 TF → mRNA(即 CDKN3)调控关系的详细过程和教程 - 实践
  • 华为wlan无线配置 - 教程
  • QBXT2025S刷题 Day1
  • 2025 年马赛克厂家 TOP 企业品牌推荐排行榜,陶瓷,游泳池,喷墨,冰裂,拼花,防滑,复古,家装马赛克推荐这十家公司!
  • 2025/10/1
  • 2025 年阀门厂家 TOP 企业品牌推荐排行榜,管道阀门,气动,调节,电动执行器,生产,电磁,不锈钢,进口,耐高温阀门推荐这十家公司
  • 爬虫逆向-AST科技
  • 赛前训练4 extra 字典树
  • CF1450E Capitalism
  • Python语言自动玩游戏的数字拼图游戏程序代码ZXQMQZQ
  • 2025 年玻璃钢水箱厂家 TOP 企业品牌推荐排行榜,30 吨,订做,消防,专业,方形,拼装式,屋顶,大型玻璃钢水箱推荐这十家公司!
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频语义理解与智能检索进阶 - 实践
  • 2025 年磨粉机厂家 TOP 企业品牌推荐排行榜,新型磨粉机,超细磨粉机,立式双动力磨粉机,节能磨粉机公司推荐!
  • (数据结构)链表OJ——刷题练习 - 实践
  • electron 安装失败
  • 机器学习15:自监督式学习(Self-Supervised Learning)① - 实践
  • 10.1 CSP模拟26 改题记录
  • Spring 核心 - AOP 面向切面编程入门, 通俗易懂
  • Window配置WSL(Ubuntu)环境
  • Hexo搭建/部署个人博客教程 - 实践
  • WPF Prism IModule,IEventAggregaor GetEvent Publish Subscribe
  • 贝尔数
  • ubuntu安装pbc库
  • 二分图判定,染色法
  • 机器学习 深度学习发展简史(简化版)