1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
| #!/bin/bash Email=[email protected] Global_API_Key=YourGlobalAPIKey domain=YourDomain.com # a_name可以为空 a_name=YourARecord
function getPublicIp() { ip="" info=`curl -s --connect-timeout 10 -m 20 \ -X GET "http://ip.taobao.com/service/getIpInfo.php?ip=myip"` ip=`echo ${info} | jq .data.ip` ip=`echo ${ip#*\"}` ip=`echo ${ip%\"*}` echo ${ip} }
function getDomainZoneId() { zone_id="" list_zones=`curl -s --connect-timeout 10 -m 20 \ -X GET "https://api.cloudflare.com/client/v4/zones?name=${domain}" \ -H "X-Auth-Email: ${Email}" \ -H "X-Auth-Key: ${Global_API_Key}" \ -H "Content-Type: application/json"` count_zone=`echo ${list_zones} | jq .result_info.count` if [[ ${count_zone} -eq 1 ]];then zone_id=`echo ${list_zones} | jq .result[0].id` zone_id=`echo ${zone_id#*\"}` zone_id=`echo ${zone_id%\"*}` fi echo ${zone_id} }
function getDnsRecord() { record="" list_dns_records=`curl -s --connect-timeout 10 -m 20 \ -X GET "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records?type=A&name=${address}" \ -H "X-Auth-Email: ${Email}" \ -H "X-Auth-Key: ${Global_API_Key}" \ -H "Content-Type: application/json"` count_dns=`echo ${list_dns_records} | jq .result_info.count` if [[ ${count_dns} -eq 1 ]];then record=`echo ${list_dns_records} | jq .result[0]` fi echo ${record} }
function getDnsRecordId() { record_id="" record=$(getDnsRecord) if [[ ${record}!="" ]];then record_id=`echo ${record} | jq .id` record_id=`echo ${record_id#*\"}` record_id=`echo ${record_id%\"*}` fi echo ${record_id} }
function getDnsRecordContent() { record_content="" record=$(getDnsRecord) if [[ ${record}!="" ]];then record_content=`echo ${record} | jq .content` record_content=`echo ${record_content#*\"}` record_content=`echo ${record_content%\"*}` fi echo ${record_content} }
function createDnsRecord() { create_success="" create_dns_record=`curl -s --connect-timeout 10 -m 20 \ -X POST "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records" \ -H "X-Auth-Email: ${Email}" \ -H "X-Auth-Key: ${Global_API_Key}" \ -H "Content-Type: application/json" \ --data "{\"type\":\"A\",\"name\":\"${address}\",\"content\":\"${ip}\"}"` create_success=`echo ${create_dns_record} | jq .success` echo ${create_success} }
function updateDnsRecord() { update_success="" update_dns_record=`curl -s --connect-timeout 10 -m 20 \ -X PUT "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id}" \ -H "X-Auth-Email: ${Email}" \ -H "X-Auth-Key: ${Global_API_Key}" \ -H "Content-Type: application/json" \ --data "{\"type\":\"A\",\"name\":\"${address}\",\"content\":\"${ip}\"}"` update_success=`echo ${update_dns_record} | jq .success` echo ${update_success} }
address=${domain} if [[ ${a_name} != "" ]];then address=${a_name}.${domain} fi echo "当前设置域名:"${address}
ip="" while [ ip="" ] do ip=$(getPublicIp) if [[ ${ip} != "" ]];then echo "公网IP:"${ip} zone_id="" zone_id=$(getDomainZoneId) if [[ ${zone_id} != "" ]];then echo "域名["${domain}"]的Zone ID:"${zone_id} record_id="" record_id=$(getDnsRecordId) record_content=$(getDnsRecordContent) if [[ ${record_id} != "" && ${record_content} != "" ]];then echo "地址["${address}"]的Record ID:"${record_id} echo "地址["${address}"]的Record Content:"${record_content} if [[ ${ip} = ${record_content} ]];then echo "地址["${address}"]的Record Content与当前公网IP一致!" else echo "地址["${address}"]的Record Content与当前公网IP不一致!" echo "更新结果:"$(updateDnsRecord) fi else echo "地址["${address}"]的Record没有找到!" echo "添加结果:"$(createDnsRecord) fi else echo "域名["${domain}"]的Zone ID没有找到!" fi break else echo "公网IP获取失败!5s后重试..." sleep 5s fi done
|