这里主要说的是linux shell下的使用。python
先看接口说明:linux
示例:shell
curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=LOGIN_TOKEN&format=json&domain_id=2317346&record_id=16894439&record_line_id=10%3D3&sub_domain=www'
首先你要去注册域名,freenom有免费的顶级域名。随便注册一个,改DNS服务器为dnspod的。json
把ns服务器改成dnspod的免费服务器,土豪尽管去dnspoe注册.com,使用收费服务器。api
等待大概24小时生效。服务器
到DNSPOD登记注册,你已经注册的域名。dom
在DNSPOD开启tokencurl
API Token 生成方法详见:https://support.dnspod.cn/Kb/showarticle/tsid/227/,完整的 API Token 是由 ID,Token 组合而成的,用英文的逗号分割post
记下ID TOKEN,token之后是不会显示的,必定记清楚,推荐记在keepass,我在用的密码管理软件。测试
我添加了一条home的记录,记录类型为A.
原来是用客户端获取一些信息,客户端也找不到了,那就用API吧。
这是wget的一个更新动态域名的命令。全部的***根据你的状况填写。
wget --no-check-certificate --post-data "login_token=*****,*********************&format=json&domain_id=******&record_id=******&record_line_id=10=0&sub_domain=****" https://dnsapi.cn/Record.Ddns
这是curl的一个更新动态域名的命令。全部的***根据你的状况填写。
curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=*****,*********************&format=json&domain_id=******&record_id=******&record_line_id=10=0&sub_domain=****'
login_token=完整的 API Token 是由 ID,Token 组合而成的,用英文的逗号分割
domain_id= 6217161 域名的ID
record_id=32837409 子域的ID
sub_domain=home 子域的名字
record_line_id=10=0 线路电信
获取基本信息,验证token配置正确:
wget --no-check-certificate --post-data "login_token=****,********************&format=json" https://dnsapi.cn/Info.Version
curl -X POST https://dnsapi.cn/Info.Version -d 'login_token=****,********************&format=json'
wget会保存一个文件
curl直接输出在屏幕
这个json串,能够在线解析一下,方便看:
https://www.bejson.com/
获取域名列表
wget --no-check-certificate --post-data "login_token=****,********************&format=json" https://dnsapi.cn/Domain.List
curl -X POST https://dnsapi.cn/Domain.List -d 'login_token=****,********************&format=json'
再去解析
这个ID,就是你的domain_id
获取域名列表
wget --no-check-certificate --post-data 'login_token=****,********************&format=json&domain_id=62171614' https://dnsapi.cn/Record.List
curl -X POST https://dnsapi.cn/Record.List -d 'login_token=****,********************&format=json&domain_id=62171614'
解析后,找到要动态解析的子域id,或者说要用的域名的id,子域的名字
我这里找的是home,就是给家里的路由找个动态域名,出门在外也能找到回家的路。
login_token=
domain_id= 62171614
record_id=328374092
sub_domain=home
如今咱们关心的数据都查出来了,从新组合一下:
wget --no-check-certificate --post-data "login_token=**,********,41a8ac7ce3039d8e7eb087ff534763d1&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home" https://dnsapi.cn/Record.Ddns
curl -X POST https://dnsapi.cn/Record.Ddns -d "login_token=**,********&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home"
在命令行里访问一下,看你的域名解析是否是已经变成你的IP了。
只是record_line_id没有说明,只写了个10=0。我也没怎么理解它是什么意思。难道是相似于CDN加速的东西?
我是电信线路,就先写上电信的ID了。
"line_ids": {
"默认": 0,
"国内": "7=0",
"国外": "3=0",
"电信": "10=0",
"联通": "10=1",
"教育网": "10=2",
"移动": "10=3",
"百度": "90=0",
"谷歌": "90=1",
"搜搜": "90=4",
"有道": "90=2",
"必应": "90=3",
"搜狗": "90=5",
"奇虎": "90=6",
"搜索引擎": "80=0"
},
在路由上尝试一下这个shell命令
晕吧
wget不支持https
curl没有这个命令
安装吧。
openwrt--系统--软件包--过滤器--wget
wget
wget-nossl
安装wget,就能够实现使用wget这个命令来更新ddns
安装curl 就可使用curl命令
不过openwrt的curl还要加一个-k参数,忽略证书。
下面说怎么在openwrt中使用这个,建立/etc/hotplug.d/iface/30-dnspod.sh
文件内容以下#!/bin/sh
#!/bin/sh # wan ifup [ $ACTION = "ifup" -a $INTERFACE = "wan" ] curl -X POST https://dnsapi.cn/Record.Ddns -k -d "login_token=***,****&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home"
curl命令中增长了-k,或略服务器HTTPS效验
#!/bin/sh # wan ifup [ $ACTION = "ifup" -a $INTERFACE = "wan" ] wget --no-check-certificate --output-document=/dev/null --post-data "login_token=***,******&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home" https://dnsapi.cn/Record.Ddns
wget命令中增长了--output-document=/dev/null,不保存返回文件。
这个意思就是WAN口上线30秒之后,执行这个wget请求,请求到dnspod的ddns更新接口,就实现了注册。