#!/bin/bash function helpexit() { echo "Print your public internet IP address." echo "-n return as host name." echo "-l display only local addresses." echo "-j JSON output from ifconfig.co" exit } function locals_only() { ip -4 -o addr | awk '!/^[0-9]*: ?lo|link\/ether/ {printf "%18s %s\n", $4, $2}' | sort -k 2 exit $? } function ifconfig_service() { which jq &>/dev/null && JQ="jq ." || JQ="cat -" $CURL ifconfig.co/json | $JQ exit $? } function setup_curl() { which curl &>/dev/null && { CURL="curl -s -4" return } which wget &>/dev/null && { CURL="wget -q -O - " return } echo "No curl or wget present" >2 exit 1 } for (( i=1; i<=$#; i++ )); do [[ "${!i}" = "--help" ]] && helpexit [[ "${!i}" = "-h" ]] && helpexit done for (( i=1; i<=1; i++ )); do [[ "${!i}" = "-n" ]] && { NAME=1; continue; } [[ "${!i}" = "-l" ]] && { LOCAL=1; continue; } [[ "${!i}" = "-j" ]] && { JSON=1; continue; } done setup_curl if [[ "$LOCAL" -eq 1 ]]; then locals_only fi if [[ "$JSON" -eq 1 ]]; then ifconfig_service fi IP=$( $CURL ifconfig.co/ip ) if [[ -z "$IP" ]]; then which dig &> /dev/null || { echo Install apt dnsutils >&2 exit 1 } IP=$( dig +short myip.opendns.com @resolver1.opendns.com ) fi if [[ "$NAME" -eq 1 ]]; then output=$( dig +short -x "$IP" ) else output="$IP" fi if [[ -z "$output" ]]; then exit 1 fi echo "$output"