新建ROS的DNSPOD脚本更新项目(2020/12/21更新)【跟着大神学走路】

本项目完全免费公开脚本源码。

ROS的DNSPOD脚本更新:
1.可直接对接DNSPOD官方服务器进行更新。(无需借助任何第三方服务器,再也不用担心安全问题了!)
2.一个脚本可以支持IPV4和IPV6的DDNS更新,填补ROS目前IPV6的DDNS解决方案的空白。
3.检测子域名不存在时自动创建
4.支持域名使用V4+V6双栈,2个IP共用一个域名
5.增加日志记录流程
6.增加域名ID缓存功能,减少API交互次数

使用条件:
1.将ROS系统版本升级到6.45.6或更高
安装并启用IPV6组件
2.没有IPV6的环境,无需填写V6的域名。(mydomains4代表V4的域名,mydomains6代表V6的域名
可以是同一个域名开启双栈。
3.子域名请尽量全部大于3位,如果子域名列表里同时存在1.x.com和11.x.com记录时会出现误判
4.
使用V4V6同时更新的域名,顶级域名必须一致,否则会因为缓存域名ID导致后续更新失败
5.不要多个拨号接口引用这同一个PPP模板
6.由于目前V6并没有统一标准,环境不一定兼容,如发现异常可以与我联系排查。


更新时间:2020/12/21
更新内容:取消使用
Domain.List相关API。不再调用出现过故障的keyword函数。


PHP代码
  1. ###程序执行完需要较长时间,请耐心等待,不要反复执行,建议放在PPP模板里ON-UP使用###  

  2. ###注意事项:子域名请尽量全部大于3位,如果子域名列表里同时存在1.x.com和11.x.com记录时会出现误判###  

  3. ###注意事项:使用V4V6同时更新的域名,顶级域名必须一致,否则会因为缓存域名ID导致后续更新失败###  

  4. ###定义必须变量#####  

  5. ###定义DNSPOD的TOKEN###  

  6. :global mytoken "xxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  

  7. ###定义自己的需更新域名(不需要更新的IP类型留空即可)###  

  8. :global mydomains4 "abc4.123.com"  

  9. :global mydomains6 "abc6.123.com"  

  10. ###定义自己的需更新的拨号接口###  

  11. :global myint "pppoe-out1"  

  12. ###以下内容无需修改###  

  13. ###预判断域名是否为双栈###  

  14. :global v4putex ""  

  15. :global v6putex ""  

  16. :if ($mydomains4 = $mydomains6do={:log error "检测到当前更新域名使用双栈。";:global v4putex "&offset=0&length=1";:global v6putex "&offset=1&length=1";}  

  17. :if ([:len $mydomains4] >0) do={  

  18. ###开始IPV4获取工作,可自行按需调整###  

  19. :global mydomain41 [:pick $mydomains4 ([:find $mydomains4 "."] +1) [:len $mydomains4]]  

  20. :global mydomain42 [:pick $mydomains4 0 [:find $mydomains4 "."]]  

  21. :global myipv4 [/ip address get [find interface=$myint] address]  

  22. :set myipv4 [:pick $myipv4 0 [:find $myipv4 "/"]]  

  23. ###开始DNSPOD处理IPV4工作,以下请勿修改###  

  24. :log error "DNSPOD脚本执行IPV4更新开始"  

  25. :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42&$v4putex"]  

  26. :delay 5s  

  27. :global reprec [/file get [find name="Record.List"] contents]  

  28. :if ([:len [:find $reprec "u7a7a"]] >0) do={  

  29. /file remove [find name="Record.List"]  

  30. :log error "DNSPOD因为没有对应子域名,尝试自己NEW一个。"  

  31. :global myipv4  

  32. :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]  

  33. :delay 5s  

  34. :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain41&sub_domain=$mydomain42"]  

  35. :delay 5s  

  36. :global reprec [/file get [find name="Record.List"] contents]  

  37. }  

  38. :if ([:len [:find $reprec "u6210"]] >0) do={  

  39. :global dnspodf [/file get [find name="Record.List"] contents]  

  40. :global fdend [:find $dnspodf ("\"".$mydomain42."\"")]  

  41. :global fdinfo [:pick $dnspodf 0 $fdend]  

  42. :while ([:len [:find $fdinfo "{"]] > 0) do={  

  43. :global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}  

  44. :global fdinfo [:pick $fdinfo 6 [:len $fdinfo]]  

  45. :global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]]  

  46. :global recordid $fdinfo  

  47. /file remove [find name="Record.List"]  

  48. :global myipv4  

  49. :if ([:len [:find $dnspodf $myipv4]] >0) do={  

  50. :log error ("DNSPOD放弃更新,IPV4没有变化。")  

  51. else={  

  52. :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"]  

  53. :delay 5s  

  54. :global reprec [/file get [find name="Record.Modify"] contents]  

  55. /file remove [find name="Record.Modify"]  

  56. :if ([:len [:find $reprec "u6210"]] >0) do={  

  57. :log error ("DNSPOD更新IPV4成功。当前IPV4为:".myipv4)  

  58. else={  

  59. :log error "DNSPOD更新IPV4失败"  

  60. }}}  

  61. :log error "DNSPOD执行脚本IPV4更新完毕"}  

  62. :if ([:len $mydomains6] >0) do={  

  63. ###开始IPV6获取工作,可自行按需调整###  

  64. :global mydomain61 [:pick $mydomains6 ([:find $mydomains6 "."] +1) [:len $mydomains6]]  

  65. :global mydomain62 [:pick $mydomains6 0 [:find $mydomains6 "."]]  

  66. :global myipv6 [/ip address get [find interface=$myint] address]  

  67. :set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]]  

  68. ###有的朋友这里V6使用release会有问题,可更换为renew尝试,和运营商有关###  

  69. /ipv6 dhcp-client release [find interface=$myint]  

  70. :delay 3s  

  71. :global myipv6 [/ipv6 dhcp-client get [find interface=$myint status=bound] prefix]  

  72. :set myipv6 [:pick $myipv6 0 [:find $myipv6 "/"]]  

  73. ###开始DNSPOD处理IPV6工作,以下请勿修改###  

  74. :log error "DNSPOD脚本执行IPV6更新开始"  

  75. :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62&$v6putex"]  

  76. :delay 5s  

  77. :global reprec [/file get [find name="Record.List"] contents]  

  78. :if ([:len [:find $reprec "u7a7a"]] >0) do={  

  79. /file remove [find name="Record.List"]  

  80. :log error "DNSPOD因为没有对应子域名,尝试自己NEW一个。"  

  81. :global myipv6  

  82. :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]  

  83. :delay 5s  

  84. :do [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$mytoken&format=json&domain=$mydomain61&sub_domain=$mydomain62"]  

  85. :delay 5s  

  86. :global reprec [/file get [find name="Record.List"] contents]}  

  87. :if ([:len [:find $reprec "u6210"]] >0) do={  

  88. :global dnspodf [/file get [find name="Record.List"] contents]  

  89. :global fdend [:find $dnspodf ("\"".$mydomain62."\"")]  

  90. :global fdinfo [:pick $dnspodf 0 $fdend]  

  91. :while ([:len [:find $fdinfo "{"]] > 0) do={  

  92. :global fdinfo [:pick $fdinfo ([:find $fdinfo "{"] +1) [:len $fdinfo]]}  

  93. :global fdinfo [:pick $fdinfo 6 [:len $fdinfo]]  

  94. :global fdinfo [:pick $fdinfo 0 [:find $fdinfo "\","]]  

  95. :global recordid $fdinfo  

  96. /file remove [find name="Record.List"]  

  97. :global myipv6  

  98. :if ([:len [:find $dnspodf $myipv6]] >0) do={  

  99. :log error ("DNSPOD放弃更新,IPV6没有变化。")  

  100. else={  

  101. :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"]  

  102. :delay 5s  

  103. :global reprec [/file get [find name="Record.Modify"] contents]  

  104. /file remove [find name="Record.Modify"]  

  105. :if ([:len [:find $reprec "u6210"]] >0) do={  

  106. :log error ("DNSPOD更新IPV6成功。当前IPV6为:".myipv6)  

  107. else={  

  108. :log error "DNSPOD更新IPV6失败"  

  109. }}}  

  110. :log error "DNSPOD执行脚本IPV6更新完毕"}    

 

ros对接dnspod直通版v4.txt

ros对接dnspod直通版v5.txt

转自大猫猫