cloudflare.sh 1.3 KB

123456789101112131415161718192021222324252627282930
  1. #!/bin/bash
  2. update_cloudflare() {
  3. 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 )
  4. 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":")[^"]*}')
  5. 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}")
  6. if [[ ${update} == *"\"success\":false"* ]]; then
  7. echo "API UPDATE FAILED. DUMPING RESULTS:\n$update"
  8. exit 1
  9. else
  10. echo "IP changed to: $ip"
  11. fi
  12. }
  13. # http://icanhazip.com Also works
  14. ip=$(curl -s http://ipecho.net/plain)
  15. update_cloudflare
  16. while sleep $WAIT; do
  17. new_ip=$(curl -s http://ipecho.net/plain)
  18. if [[ "${ip}" == "$new_ip" ]]; then
  19. echo "Same ip: $ip"
  20. else
  21. ip="$new_ip"
  22. update_cloudflare
  23. fi
  24. done