家里一直用的花生壳,靠路由器自带的DDNS进行更新
然后再把DDNS的域名CNAME到自己的顶级域名底下,曲线DDNS…………
???
曾经,我还是一个懵懂少年
但如今!我已经是一个啥都懂的少女了!(?
DNSPod是提供了API的,用接口做,不是更舒服吗?(???
DNSPod的鉴权方式采用Token,详见官方API鉴权方式升级为Token
[mdx_warning title="需要注意一下LOGIN_TOKEN的格式为ID,Token,上面链接在最后有写"][/mdx_warning]
之后就是拿到我们实现DDNS的一些必要参数,API文档在这里DNSPod用户API文档,返回格式为JSON
先查到域名ID,再查到记录ID
在解析下新建了新记录,前缀nas,暂时填个1.1.1.1(1.1.1.1一百种错误用法演示
获取一下域名列表:curl -X POST https://dnsapi.cn/Domain.List -d 'login_token=LOGIN_TOKEN&format=json'
就可以得到对应域名ID(JSON格式化是个好东西

拿到了域名ID,就可以对应着去记录列表找记录ID了,查询时也可以选加参数限定一下前缀sub_domain=nas:
curl -X POST https://dnsapi.cn/Record.List -d 'login_token=LOGIN_TOKEN&format=json&domain_id=DOMAIN_ID'
同样得到了记录ID,到这一步为止应该就够用了

如何获得当前IP地址呢?openwrt或者什么的接口当然是可以的,但是我觉得使用IP检查页应该是最方便的了,这项服务一般的DDNS提供商都会提供的,例如花生壳的地址为http://ddns.oray.com/checkip
最后调用接口修改记录:
curl -X POST https://dnsapi.cn/Record.Modify -d 'login_token=LOGIN_TOKEN&format=json&domain_id=2317346&record_id=RECORD_ID&sub_domain=nas&value=NEWIP&record_type=A&record_line_id=0'
关于这个record_line_id或者record_line其实在查询记录列表的时候有返回的,对应的就是“线路类型”,“默认”是“0”,官方示例给的是“10=3”,是电信…………???
反正我直接设0了……不讲究(x
思路呢,大概就这么个思路,用Python简单撸了一个,其实也写了一个sh版本的,但是是第一次写sh,各种不堪入目,不好意思放了(
(妈个鸡老娘的缩进怎么让WP吃了,还加不上(
import urllib.request
import re
LOGIN_TOKEN = b"xxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"#填入LOGIN_TOKEN,格式为ID,Token
domain_id = b"xxxxxxxx"#域名ID
record_id = b"xxxxxxxxx"#记录ID
sub_domain = b"xxx"#域名前缀
s_new_ip = urllib.request.urlopen("http://ddns.oray.com/checkip").read().decode('utf8')
new_ip = re.findall(re.compile(r'Current IP Address: (.*?)',re.S),s_new_ip)[0]
print(new_ip)
s_old_ip = urllib.request.urlopen("https://dnsapi.cn/Record.List",data=b"login_token="+LOGIN_TOKEN+b"&format=json&sub_domain="+sub_domain+"&domain_id="+domain_id).read().decode('utf8')
old_ip = re.findall(re.compile(r'"ttl":"600","value":"(.*?)"',re.S),s_old_ip)[0]
print(old_ip)
if new_ip==old_ip:
print("IP没有改变")
else:
print("IP发生改变")
change_ip = urllib.request.urlopen("https://dnsapi.cn/Record.Modify",data=b"login_token="+LOGIN_TOKEN+b"&format=json&sub_domain="+sub_domain+"&domain_id="+domain_id+b"&record_type=A&record_line_id=10%3D0&record_id="+record_id+"&sub_domain="+sub_domain+"&value="+bytes(new_ip,encoding=("utf8"))).read().decode('utf8')
print("记录已修改")
Quotmarks Replacer插件可以禁用Wordpress把你的英文符号转义成中文符号,SyntaxHighlighter Evolved可以用来做代码高亮插件,不会丢失缩进格式。
kot4ri 2018-09-08 14:41