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. 27
      cloudflare-template.sh

@ -17,18 +17,27 @@ discorduri="" # URI for Discord WebHook "h
########################################### ###########################################
## Check if we have a public IP ## 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])' 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=$(curl -s -4 https://cloudflare.com/cdn-cgi/trace | grep -E '^ip'); ret=$? IP_SERVICES=(
if [[ ! $ret == 0 ]]; then # In the case that cloudflare failed to return an ip. "https://api.ipify.org"
# Attempt to get the ip from other websites. "https://ipv4.icanhazip.com"
ip=$(curl -s https://api.ipify.org || curl -s 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 else
# Extract just the ip from the ip line from cloudflare. logger -s "DDNS Updater: IP service $service failed."
ip=$(echo $ip | sed -E "s/^ip=($ipv4_regex)$/\1/")
fi fi
done
# Use regex to check for proper IPv4 format. # Exit if IP fetching failed
if [[ ! $ip =~ ^$ipv4_regex$ ]]; then if [[ -z "$CURRENT_IP" ]]; then
logger -s "DDNS Updater: Failed to find a valid IP." logger -s "DDNS Updater: Failed to find a valid IP."
exit 2 exit 2
fi fi

Loading…
Cancel
Save