###程序执行完需要较长时间,请耐心等待,不要反复执行,建议放在PPP模板里ON-UP使用### ###注意事项:子域名请尽量全部大于3位,如果子域名列表里同时存在1.x.com和11.x.com记录时会出现误判### ###注意事项:使用V4V6同时更新的域名,顶级域名必须一致,否则会因为缓存域名ID导致后续更新失败### ###定义必须变量##### ###定义DNSPOD的TOKEN### :global mytoken "xxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ###定义自己的需更新域名(不需要更新的IP类型留空即可)### :global mydomains4 "abc4.123.com" :global mydomains6 "abc6.123.com" ###定义自己的需更新的拨号接口### :global myint "pppoe-out1" ###以下内容无需修改### ###预判断域名是否为双栈### :global v4putex "" :global v6putex "" :if ($mydomains4 = $mydomains6) do={:log error "检测到当前更新域名使用双栈。";:global v4putex "&offset=0&length=1";:global v6putex "&offset=1&length=1";} :if ([:len $mydomains4] >0) do={ ###开始IPV4获取工作,可自行按需调整### :global mydomain41 [:pick $mydomains4 ([:find $mydomains4 "."] +1) [:len $mydomains4]] :global mydomain42 [:pick $mydomains4 0 [:find $mydomains4 "."]] :global myipv4 [/ip address get [find interface=$myint] address] :set myipv4 [:pick $myipv4 0 [:find $myipv4 "/"]] ###开始DNSPOD处理IPV4工作,以下请勿修改### :log error "DNSPOD脚本执行IPV4更新开始" :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42&$v4putex"] :delay 5s :global reprec [/file get [find name="Record.List"] contents] :if ([:len [:find $reprec "u7a7a"]] >0) do={ /file remove [find name="Record.List"] :log error "DNSPOD因为没有对应子域名,尝试自己NEW一个。" :global myipv4 :do [/tool fetch url="https://dnsapi.cn/Record.Create" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42&value=$myipv4&record_type=A&record_line=%e9%bb%98%e8%ae%a4" keep-result=no] :delay 5s :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42"] :delay 5s :global reprec [/file get [find name="Record.List"] contents] } :if ([:len [:find $reprec "u6210"]] >0) do={ :global dnspodf [/file get [find name="Record.List"] contents] :global fdend [:find $dnspodf ("\"".$mydomain42."\"")] :global fdinfo [:pick $dnspodf 0 $fdend] :while ([:len [:find $fdinfo "{"]] > 0) do={ :global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]} :global fdinfo [:pick $fdinfo 6 [:len $fdinfo]] :global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]] :global recordid $fdinfo /file remove [find name="Record.List"] :global myipv4 :if ([:len [:find $dnspodf $myipv4]] >0) do={ :log error ("DNSPOD放弃更新,IPV4没有变化。") } else={ :do [/tool fetch url="https://dnsapi.cn/Record.Modify" http-data="login_token=$mytoken&format=json&domain=$mydomain41&record_id=$recordid&sub_domain=$mydomain42&value=$myipv4&record_type=A&record_line=%e9%bb%98%e8%ae%a4"] :delay 5s :global reprec [/file get [find name="Record.Modify"] contents] /file remove [find name="Record.Modify"] :if ([:len [:find $reprec "u6210"]] >0) do={ :log error ("DNSPOD更新IPV4成功。当前IPV4为:".myipv4) } else={ :log error "DNSPOD更新IPV4失败" }}} :log error "DNSPOD执行脚本IPV4更新完毕"} :if ([:len $mydomains6] >0) do={ ###开始IPV6获取工作,可自行按需调整### :global mydomain61 [:pick $mydomains6 ([:find $mydomains6 "."] +1) [:len $mydomains6]] :global mydomain62 [:pick $mydomains6 0 [:find $mydomains6 "."]] :global myipv6 [/ip address get [find interface=$myint] address] :set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]] ###有的朋友这里V6使用release会有问题,可更换为renew尝试,和运营商有关### /ipv6 dhcp-client release [find interface=$myint] :delay 3s :global myipv6 [/ipv6 dhcp-client get [find interface=$myint status=bound] prefix] :set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]] ###开始DNSPOD处理IPV6工作,以下请勿修改### :log error "DNSPOD脚本执行IPV6更新开始" :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62&$v6putex"] :delay 5s :global reprec [/file get [find name="Record.List"] contents] :if ([:len [:find $reprec "u7a7a"]] >0) do={ /file remove [find name="Record.List"] :log error "DNSPOD因为没有对应子域名,尝试自己NEW一个。" :global myipv6 :do [/tool fetch url="https://dnsapi.cn/Record.Create" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62&value=$myipv6&record_type=AAAA&record_line=%e9%bb%98%e8%ae%a4" keep-result=no] :delay 5s :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62"] :delay 5s :global reprec [/file get [find name="Record.List"] contents]} :if ([:len [:find $reprec "u6210"]] >0) do={ :global dnspodf [/file get [find name="Record.List"] contents] :global fdend [:find $dnspodf ("\"".$mydomain62."\"")] :global fdinfo [:pick $dnspodf 0 $fdend] :while ([:len [:find $fdinfo "{"]] > 0) do={ :global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]} :global fdinfo [:pick $fdinfo 6 [:len $fdinfo]] :global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]] :global recordid $fdinfo /file remove [find name="Record.List"] :global myipv6 :if ([:len [:find $dnspodf $myipv6]] >0) do={ :log error ("DNSPOD放弃更新,IPV6没有变化。") } else={ :do [/tool fetch url="https://dnsapi.cn/Record.Modify" http-data="login_token=$mytoken&format=json&domain=$mydomain61&record_id=$recordid&sub_domain=$mydomain62&value=$myipv6&record_type=AAAA&record_line=%e9%bb%98%e8%ae%a4"] :delay 5s :global reprec [/file get [find name="Record.Modify"] contents] /file remove [find name="Record.Modify"] :if ([:len [:find $reprec "u6210"]] >0) do={ :log error ("DNSPOD更新IPV6成功。当前IPV6为:".myipv6) } else={ :log error "DNSPOD更新IPV6失败" }}} :log error "DNSPOD执行脚本IPV6更新完毕"}