1
0

cfst_ddns.sh 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH
  4. # --------------------------------------------------------------
  5. # 项目: CloudflareSpeedTest 自动更新域名解析记录
  6. # 版本: 1.0.5
  7. # 作者: XIU2
  8. # 项目: https://github.com/XIU2/CloudflareSpeedTest
  9. # --------------------------------------------------------------
  10. _READ() {
  11. [[ ! -e "cfst_ddns.conf" ]] && echo -e "[错误] 配置文件不存在 [cfst_ddns.conf] !" && exit 1
  12. CONFIG=$(cat "cfst_ddns.conf")
  13. FOLDER=$(echo "${CONFIG}"|grep 'FOLDER='|awk -F '=' '{print $NF}')
  14. [[ -z "${FOLDER}" ]] && echo -e "[错误] 缺少配置项 [FOLDER] !" && exit 1
  15. ZONE_ID=$(echo "${CONFIG}"|grep 'ZONE_ID='|awk -F '=' '{print $NF}')
  16. [[ -z "${ZONE_ID}" ]] && echo -e "[错误] 缺少配置项 [ZONE_ID] !" && exit 1
  17. DNS_RECORDS_ID=$(echo "${CONFIG}"|grep 'DNS_RECORDS_ID='|awk -F '=' '{print $NF}')
  18. [[ -z "${DNS_RECORDS_ID}" ]] && echo -e "[错误] 缺少配置项 [DNS_RECORDS_ID] !" && exit 1
  19. KEY=$(echo "${CONFIG}"|grep 'KEY='|awk -F '=' '{print $NF}')
  20. [[ -z "${KEY}" ]] && echo -e "[错误] 缺少配置项 [KEY] !" && exit 1
  21. EMAIL=$(echo "${CONFIG}"|grep 'EMAIL='|awk -F '=' '{print $NF}')
  22. [[ -z "${EMAIL}" ]] && echo -e "[信息] 缺少配置项 [EMAIL],由 [API 密钥] 方式转为 [API 令牌] 方式!"
  23. TYPE=$(echo "${CONFIG}"|grep 'TYPE='|awk -F '=' '{print $NF}')
  24. [[ -z "${TYPE}" ]] && echo -e "[错误] 缺少配置项 [TYPE] !" && exit 1
  25. NAME=$(echo "${CONFIG}"|grep 'NAME='|awk -F '=' '{print $NF}')
  26. [[ -z "${NAME}" ]] && echo -e "[错误] 缺少配置项 [NAME] !" && exit 1
  27. TTL=$(echo "${CONFIG}"|grep 'TTL='|awk -F '=' '{print $NF}')
  28. [[ -z "${TTL}" ]] && echo -e "[错误] 缺少配置项 [TTL] !" && exit 1
  29. PROXIED=$(echo "${CONFIG}"|grep 'PROXIED='|awk -F '=' '{print $NF}')
  30. [[ -z "${PROXIED}" ]] && echo -e "[错误] 缺少配置项 [PROXIED] !" && exit 1
  31. }
  32. _UPDATE() {
  33. # 这里可以自己添加、修改 CloudflareST 的运行参数
  34. ./CloudflareST -o "result_ddns.txt"
  35. # 判断结果文件是否存在,如果不存在说明结果为 0
  36. [[ ! -e "result_ddns.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
  37. CONTENT=$(sed -n "2,1p" result_ddns.txt | awk -F, '{print $1}')
  38. if [[ -z "${CONTENT}" ]]; then
  39. echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."
  40. exit 0
  41. fi
  42. # 如果 EMAIL 变量是空的,那么就代表要使用 API 令牌方式
  43. if [[ -n "${EMAIL}" ]]; then
  44. # API 密钥方式(全局权限)
  45. curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_RECORDS_ID}" \
  46. -H "X-Auth-Email: ${EMAIL}" \
  47. -H "X-Auth-Key: ${KEY}" \
  48. -H "Content-Type: application/json" \
  49. --data "{\"type\":\"${TYPE}\",\"name\":\"${NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}"
  50. else
  51. # API 令牌方式(自定义权限)
  52. curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_RECORDS_ID}" \
  53. -H "Authorization: Bearer ${KEY}" \
  54. -H "Content-Type: application/json" \
  55. --data "{\"type\":\"${TYPE}\",\"name\":\"${NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}"
  56. fi
  57. }
  58. _READ
  59. cd "${FOLDER}"
  60. _UPDATE