Skip to content

Instantly share code, notes, and snippets.

@vulkoingim
Created May 24, 2018 10:11
Show Gist options
  • Save vulkoingim/84d8d17abcbef48fe9dd6e0adacedaf8 to your computer and use it in GitHub Desktop.
Save vulkoingim/84d8d17abcbef48fe9dd6e0adacedaf8 to your computer and use it in GitHub Desktop.

Revisions

  1. vulkoingim created this gist May 24, 2018.
    59 changes: 59 additions & 0 deletions gcp_ips.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    #!/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}"