Fix ip fetching

Changed ipv4 regex to a better version, from https://stackoverflow.com/a/13778973/5853386
Added public ip services to an array for better functionality and maintainability
Added a log to monitor if an ip service is failing
pull/102/head
iBreakEverything 2 months ago
parent 52e8a2eedf
commit 34c24eea37
  1. 35
      cloudflare-template.sh

@ -17,20 +17,29 @@ discorduri="" # URI for Discord WebHook "h
###########################################
## Check if we have a public IP
###########################################
ipv4_regex='([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])'
ip=$(curl -s -4 https://cloudflare.com/cdn-cgi/trace | grep -E '^ip'); ret=$?
if [[ ! $ret == 0 ]]; then # In the case that cloudflare failed to return an ip.
# Attempt to get the ip from other websites.
ip=$(curl -s https://api.ipify.org || curl -s https://ipv4.icanhazip.com)
else
# Extract just the ip from the ip line from cloudflare.
ip=$(echo $ip | sed -E "s/^ip=($ipv4_regex)$/\1/")
fi
REGEX_IPV4="^(0*(1?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))\.){3}0*(1?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))$"
IP_SERVICES=(
"https://api.ipify.org"
"https://ipv4.icanhazip.com"
"https://ipinfo.io/ip"
)
# Try all the ip services for a valid IPv4 address
for service in ${IP_SERVICES[@]}; do
RAW_IP=$(curl -s $service)
if [[ $RAW_IP =~ $REGEX_IPV4 ]]; then
CURRENT_IP=$BASH_REMATCH
logger -s "DDNS Updater: Fetched IP $CURRENT_IP"
break
else
logger -s "DDNS Updater: IP service $service failed."
fi
done
# Use regex to check for proper IPv4 format.
if [[ ! $ip =~ ^$ipv4_regex$ ]]; then
logger -s "DDNS Updater: Failed to find a valid IP."
exit 2
# Exit if IP fetching failed
if [[ -z "$CURRENT_IP" ]]; then
logger -s "DDNS Updater: Failed to find a valid IP."
exit 2
fi
###########################################

Loading…
Cancel
Save