dotfiles/bin/myip

68 lines
1.6 KiB
Plaintext
Raw Normal View History

2022-09-06 23:34:19 -06:00
#!/bin/bash
# List system's WAN and LAN ip addresses
# Depends on ifconfig and awk
if [[ $1 =~ '-h' ]]; then
cat <<EOF
List the system's WAN and LAN addresses
USAGE:
$(basename "$0")
EOF
exit 0
fi
awk_lan () {
awk '
BEGIN { print "Local:" }
/UP/ {
split($0, info, /:/)
device_name = '"$1"'
is_up = 1
}
match($0, /inet ([0-9]{1,3}\.){3}[0-9]{1,3}(\/[0-9]{1,3})? /) {
if (is_up) {
ip_addr = substr($0, RSTART + 5, RLENGTH - 5)
printf(" %s: %s\n", device_name, ip_addr)
is_up = 0
}
}' -
}
# List all possible inet addresses
if command -v ip address &> /dev/null; then
ip address | awk_lan 'substr(info[2], 2)'
elif command -v ifconfig &> /dev/null; then
ifconfig | awk_lan 'info[1]'
else
echo '`ifconfig` not found'
fi
# Print network's public IP address
if command -v dig &> /dev/null; then
public_ip=$(dig +short myip.opendns.com @resolver2.opendns.com)
elif command -v host &> /dev/null; then
public_ip=$(host myip.opendns.com resolver1.opendns.com)
fi
# Backup address fetching. Slower though more reliable
if [[ -z $public_ip ]]; then
if command -v curl &> /dev/null; then
public_ip=$(curl --silent https://ifconfig.me/ip)
elif command -v wget &> /dev/null; then
public_ip=$(wget --quiet -O - https://ifconfig.me/ip)
fi
fi
if [[ -n $public_ip ]]; then
echo "$public_ip" | awk ' match($0, /([0-9]{1,3}\.){3}[0-9]{1,3}$/) {
printf("Public (WAN): %s\n", substr($0, RSTART, RLENGTH))
}'
else
echo 'Public IP not found'
fi