diff --git a/getmyip b/getmyip new file mode 100755 index 0000000..90486f9 --- /dev/null +++ b/getmyip @@ -0,0 +1,52 @@ +#!/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 + echo "$public_ip" + return + fi + done + + # If none of the services returned a valid IP, output an error message + echo "Error: Failed to retrieve public IP using all services." >&2 + exit 1 +} + +# Execute the function +get_public_ip +