#!/bin/bash # Check if a txt is a valid ip function valid_ip() { local ip=$1 local stat=1 if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then OIFS=$IFS IFS='.' ip=($ip) IFS=$OIFS [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] stat=$? fi return $stat } # Services to get public ip SERVICES=( "curl --silent -sw :%{http_code} ifconfig.me" "curl --silent -sw :%{http_code} ident.me" "curl --silent -sw :%{http_code} icanhazip.com" "curl --silent -sw :%{http_code} ipecho.net/plain" "curl --silent -sw :%{http_code} ipinfo.io/ip" ) # Get public ip for service in "${SERVICES[@]}"; do RUN_COMMAND=$($service | tr -d '[:space:]') IP=$(echo $RUN_COMMAND | cut -d':' -f1) HTTP_CODE=$(echo $RUN_COMMAND | cut -d':' -f2) if [ "$HTTP_CODE" == "200" ]; then if valid_ip "$IP"; then printf "$IP" exit 0 fi fi done printf "error" exit 0