smeserver-lib/root/sbin/e-smith/getmyip

55 lines
1.4 KiB
Plaintext
Raw Normal View History

#!/bin/bash
# List of services to query for the public IP
services=(
"ifconfig.me"
"ipinfo.io/ip"
"icanhazip.com"
"api.ipify.org"
"ident.me"
"ip.tyk.nu"
"checkip.amazonaws.com"
"ipecho.net/plain"
"myip.dnsomatic.com"
"ip.seeip.org"
"ipapi.co/ip"
"wtfismyip.com/text"
"openident.net/ip"
"ifconfig.co/ip"
)
# Function to shuffle the array of services
shuffle_services() {
local i
for ((i=${#services[@]} - 1; i > 0; i--)); do
local j=$((RANDOM % (i + 1)))
local temp="${services[i]}"
services[i]="${services[j]}"
services[j]="$temp"
done
}
# Function to fetch the public IP address
get_public_ip() {
shuffle_services
for service in "${services[@]}"; do
public_ip=$(curl -s --max-time 5 "$service")
# Check if the curl request was successful and there's a valid IP address
if [[ $? -eq 0 && $public_ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
logger -t public_ip_script "Service used: $service, IP found: $public_ip"
echo "$public_ip"
return
fi
done
# If none of the services returned a valid IP, output an error message
echo "Failed to retrieve public IP using all services." >&2
logger -t public_ip_script "Error: Failed to retrieve public IP using all services."
exit 1
}
# Execute the function
get_public_ip