#!/usr/bin/env bash ######################################################## # Networking functions ######################################################## get_current_ip() { local CURRENT_IP [ -f /etc/os-release ] && source /etc/os-release case "$ID" in debian|ubuntu) CURRENT_IP=$(hostname -I | awk '{print $1}') ;; alpine) CURRENT_IP=$(ip -4 addr show eth0 | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1) ;; *) CURRENT_IP="Unknown" ;; esac echo "$CURRENT_IP" } get_external_ip() { local ip="$(curl -s https://api.myip.com | jq .ip)" echo "$ip" | tr -d '"' } is_valid_ipv4() { local ip="$1" local regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$" if [[ $ip =~ $regex ]]; then IFS='.' read -r -a parts <<< "$ip" for part in "${parts[@]}"; do if ! [[ $part =~ ^[0-9]+$ ]] || ((part < 0 || part > 255)); then return 1 fi done return 0 fi return 1 } curltime() { curl -w @- -o /dev/null -s "$@" <<'EOF' time_namelookup: %{time_namelookup} sec\n time_connect: %{time_connect} sec\n time_appconnect: %{time_appconnect} sec\n time_pretransfer: %{time_pretransfer} sec\n time_redirect: %{time_redirect} sec\n time_starttransfer: %{time_starttransfer} sec\n ---------------\n time_total: %{time_total} sec\n EOF }