cloudflare.sh 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. #!/bin/sh
  2. date "+%Y-%m-%d %H:%M:%S"
  3. ip_file="ip.txt"
  4. new_ip=$(curl -s http://ipecho.net/plain)
  5. if [ -f $ip_file ]; then
  6. ip=$(cat $ip_file)
  7. if [ "$ip" = "$new_ip" ]; then
  8. echo "Same ip: $ip"
  9. exit 0
  10. fi
  11. fi
  12. ip="$new_ip"
  13. echo "IP: $ip"
  14. zone_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json" | perl -nle'print $& if m{(?<="id":")[^"]*}' | head -1 )
  15. echo "Zone ID: $zone_id"
  16. record_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records?name=$ZONE" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json" | perl -nle'print $& if m{(?<="id":")[^"]*}')
  17. echo "Record ID: $record_id"
  18. update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$record_id" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json" --data "{\"id\":\"$zone_id\",\"type\":\"A\",\"name\":\"$ZONE\",\"content\":\"$ip\",\"ttl\":$TTL,\"proxied\":$PROXY}")
  19. if echo "$update" | grep -q "\"success\":true"; then
  20. echo "IP changed to: $ip"
  21. echo "$ip" > $ip_file
  22. else
  23. printf "Update failed:\\n%s" "$update"
  24. exit 1
  25. fi