指令获取本机ip
通过curl ipinfo.io获得
不加/ip获得更多信息
curl https://v6.ipinfo.io/ip
curl https://ipinfo.io/ip
想手撕cloudflare的api做AAAA
一开始用的docker是 https://hub.docker.com/r/oznu/cloudflare-ddns/
docker run \
--name ddns \
--restart=always \
-e API_KEY=具体API \
-e ZONE=具体域名 \
-e SUBDOMAIN=相关子域名\
-e RRTYPE=A \
-e CRON="*/15 * * * *" \
oznu/cloudflare-ddns
上面的A的IPv4跑起来没问题,只是第一次跑的话,ssh指令结束后docker也就停了,得去portainer重新运行下
但是IPv6就更新不到,在oznu/cloudflare-ddns的说明中看到得启用docker的IPv6。。。
docker run \
--name ddns_v6 \
--restart=always \
-e API_KEY=具体API \
-e ZONE=具体域名 \
-e SUBDOMAIN=相关子域名\
-e RRTYPE=AAAA \
-e CRON="*/15 * * * *" \
oznu/cloudflare-ddns
docker做AAAA解析需要docker开启ipv6支持 实际开启很麻烦,默认的桥接就很多限制而且必须是公网分配下来的ip局域网的v6没法做桥接,还得在/80以内 以上说法参考自 https://www.rectcircle.cn/posts/docker-ipv6/
最简单使用“通过 IPv6NAT 方式支持 IPv6”但是得通过robbertkl/docker-ipv6nat。
就很没效率,实际执行的只是corntab 固定时间把 IP地址更新到赛博大善人那
首先旧版本的是使用X-Auth-Email和X-Auth-Key
新版本使用的是Authorization: Bearer
第一步获得zones的ID
api=具体API
剩下的就是怎么处理json的问题了,一般选择的是python,为了做到最简洁尝试使用sed grep awk cut进行处理。。。直接字符串截取,按长度。。。
https://www.cnblogs.com/stevensfollower/p/5093001.html
zones=$(curl -sX GET "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer $api" \
-H "Content-Type:application/json")
//通过$zones查询到具体的zones的情况,然后通过awk找到对应字符的位置
p1=$(awk -v a="$zones" -v b="id" 'BEGIN{print index(a,b)}')
zones=${zones:$(expr $p1 + 4):32}
//id对应的位置再向后4个,后面的32位就是zone的ID了
或者合并一行写:
zones=${zones:$(expr $(awk -v a="$zones" -v b="id" 'BEGIN{print index(a,b)}') + 4):32}
//获得具体的dns记录
dns_records=$(curl -sX GET "https://api.cloudflare.com/client/v4/zones/$zones/dns_records" \
-H "Authorization: Bearer $api" \
-H "Content-Type:application/json")
//继续对DNS记录进行处理找到具体的记录
推荐阅读: