找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 87|回复: 1

[脚本] 请大师帮忙修改 错误的 DNS静态IP地址比对与自动更新 脚本

[复制链接]
30 铜板 回复本帖可获得 10 铜板奖励! 每人限 1 次
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 smx_jinxin 于 2025-9-11 17:47 编辑

# ========================
# 模块 3: DNS静态IP地址比对与自动更新
# ========================
/system script add name=Check_DNS_Consistency source="
    :log info 【DNS全网比对】任务开始执行
   
    # 检测网络连通性(任意一条PPPoE线路连通即可)
    :local testIP 223.5.5.5
    :local interfaces {PPPOE-ADSL-1PPOE-ADSL-2PPOE-ADSL-3PPOE-ADSL-4}
    :local isConnected false
   
    :foreach i in=$interfaces do={
        :local pingResult [/ping address=$testIP count=2 interface=$i as-value]
        :if ([:len $pingResult] > 0) do={
            :local received ($pingResult->received)
            :local packetLoss ($pingResult->packet-loss)
            :if (($received >= 1) || ($packetLoss == 0)) do={
                :set isConnected true
                :log info (网络检测: $i 线路连通正常)
            }
        }
    }
   
    :if ($isConnected == false) do={
        :log warning 【DNS全网比对】所有线路均未连通,任务终止
        :return
    }
   
    # 获取所有需要比对的域名列表
    :local domainList [/ip dns static find where comment=auto-update]
    :local updatedCount 0
   
    :foreach recordID in=$domainList do={
        :local domainName [/ip dns static get $recordID name]
        :local currentIP [/ip dns static get $recordID address]
        
        # 使用多个DNS服务器进行全网解析
        :local resolvedIPs {}
        :local dnsServers {
            # 国际DNS服务器
            1.1.1.1        # Cloudflare
            8.8.8.8        # Google
            9.9.9.9        # Quad9
            208.67.222.222 # OpenDNS
            208.67.220.220 # OpenDNS
            64.6.64.6      # Verisign
            84.200.69.80   # DNS.Watch
            185.228.168.9  # CleanBrowsing
            199.85.126.10  # Norton ConnectSafe
            80.80.80.80    # Freenom World
            156.154.70.1   # Neustar
            
            # 国内DNS服务器
            223.5.5.5      # AliDNS
            223.6.6.6      # AliDNS
            119.29.29.29   # DNSPod
            182.254.116.116 # DNSPod
            180.76.76.76   # BaiduDNS
            114.114.114.114 # 114DNS
            114.114.115.115 # 114DNS
            101.226.4.6    # 360安全DNS
            218.30.118.6   # 360安全DNS
            1.2.4.8        # CNNIC SDNS
            210.2.4.8      # CNNIC SDNS
            117.50.10.10   # OneDNS
            117.50.11.11   # OneDNS
            123.125.81.6   # Baidu Public DNS
            119.28.28.28   # DNSPod Public DNS+
        }
        
        # 收集所有解析结果
        :foreach server in=$dnsServers do={
            :local result [/tool dns lookup server=$server name=$domainName]
            :if ([:len $result] > 0) do={
                :local ip [:pick $result 0]
                :if ([:typeof $ip] = ip) do={
                    :set resolvedIPs ($resolvedIPs, $ip)
                }
            }
        }
        
        # 找出最常见的IP
        :local mostCommonIP
        :local maxCount 0
        :local ipCount [:toarray ]   # 创建一个字典(数组)
        
        :foreach ip in=$resolvedIPs do={
            :if ([:len $ip] > 0) do={
                :if ([:typeof ($ipCount->$ip)] = nothing) do={
                    :set ($ipCount->$ip) 1
                } else={
                    :set ($ipCount->$ip) ($ipCount->$ip + 1)
                }
               
                :if ($ipCount->$ip > $maxCount) do={
                    :set mostCommonIP $ip
                    :set maxCount ($ipCount->$ip)
                }
            }
        }
        
        # 更新记录(如果找到一致结果且与当前不同)
        :if ([:len $mostCommonIP] > 0 && $mostCommonIP != $currentIP) do={
            /ip dns static set $recordID address=$mostCommonIP
            :log info (域名 $domainName IP更新: $currentIP -> $mostCommonIP (一致性: $maxCount/[:len $dnsServers]))
            :set updatedCount ($updatedCount + 1)
        }
    }
   
    :if ($updatedCount > 0) do={
        /ip dns cache flush
        :log info 【DNS全网比对】完成, $updatedCount 条记录已更新
    } else={
        :log info 【DNS全网比对】完成, 所有记录均为最新状态
    }
"
routeros
发表于 3 天前 | 显示全部楼层

回帖奖励 +10 铜板

/tool dns lookup server应该用 [:resolve server=8.8.8.8 domain-name=routeros.cn] 吧
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2025-9-14 00:09 , Processed in 0.355811 second(s), 15 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表