Skip to content

Instantly share code, notes, and snippets.

@vulkoingim
Created May 24, 2018 10:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save vulkoingim/84d8d17abcbef48fe9dd6e0adacedaf8 to your computer and use it in GitHub Desktop.
Save vulkoingim/84d8d17abcbef48fe9dd6e0adacedaf8 to your computer and use it in GitHub Desktop.
Get GCP Public IP Ranges
#!/usr/bin/env bash
# This script lists all ip ranges currently used by
# the google cloud platform, according to ns-lookup / dig
# TXT _cloud-netblocks.googleusercontent.com
#
# https://cloud.google.com/compute/docs/faq#ipranges
errcho() {
>&2 echo "$@"
}
_fmt() {
echo "$1" | cut -f "$2" -d':'
}
_txt_recursive() {
for txt_entry in $(dig txt "$1" +short | tr " " "\n"); do
if [[ "${txt_entry}" == include:* ]]; then
_txt_recursive "$(_fmt ${txt_entry} 2)"
elif [[ "${txt_entry}" == ip4:* && "${ipv4}" == true ]]; then
_fmt "${txt_entry}" 2
elif [[ "${txt_entry}" == ip6:* && "${ipv6}" == true ]]; then
_fmt "${txt_entry}" 2-9
fi
done
}
domain="_cloud-netblocks.googleusercontent.com"
ipv4=true
ipv6=true
while (( $# > 0 )); do
case "$1" in
--ipv4)
ipv6=false
shift 1
;;
--ipv6)
ipv4=false
shift 1
;;
--domain)
domain="$2"
shift 2
;;
*)
errcho "Unknown option $1"
exit 1
;;
esac
done
if [[ "${ipv4}" == false && "${ipv6}" == false ]]; then
errcho "WARN: --ipv4 and --ipv6 options are mutually exclusive and will likely prevent output"
fi
_txt_recursive "${domain}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment