Skip to content

Instantly share code, notes, and snippets.

@bglnelissen
Last active August 8, 2021 21:00
Show Gist options
  • Select an option

  • Save bglnelissen/59894e848fc8f1e1ffbc8a09d4b2e30c to your computer and use it in GitHub Desktop.

Select an option

Save bglnelissen/59894e848fc8f1e1ffbc8a09d4b2e30c to your computer and use it in GitHub Desktop.

Revisions

  1. bglnelissen revised this gist Aug 8, 2021. 1 changed file with 14 additions and 1 deletion.
    15 changes: 14 additions & 1 deletion wg-json-geoip.sh
    Original file line number Diff line number Diff line change
    @@ -28,7 +28,20 @@ while read -r -d $'\t' device; do
    delim=$'\n'
    [[ $preshared_key == "(none)" ]] || { printf '%s\t\t\t\t"presharedKey": "%s"' "$delim" "$preshared_key"; delim=$',\n'; }
    [[ $endpoint == "(none)" ]] || { printf '%s\t\t\t\t"endpoint": "%s"' "$delim" "$endpoint"; delim=$',\n'; }
    [[ $endpoint == "(none)" ]] || { printf '%s\t\t\t\t"geoiplookup": "%s"' "$delim" "$(geoiplookup $(echo $endpoint | sed 's/\(.*\)\:.*/\1/g') | sed 's/.*:[\ ]*//g')"; delim=$',\n'; }
    # get ip address from endpoint
    ip="$(echo $endpoint | sed 's/\(.*\)\:.*/\1/g' | sed 's/.*:[\ ]*//g')"
    [[ $endpoint == "(none)" ]] || { printf '%s\t\t\t\t"ip": "%s"' "$delim" "$ip"; delim=$',\n'; }
    # regex to find local/global ip addresses
    local1="^192\..*$"
    local2="^10\..*$"
    if [[ "${ip}" =~ $local1 ]]; then
    geo="local"
    elif [[ "${ip}" =~ $local2 ]]; then
    geo="local"
    else
    geo="$(geoiplookup $ip | sed 's/.*:[\ ]*//g')"
    fi
    [[ $endpoint == "(none)" ]] || { printf '%s\t\t\t\t"geoiplookup": "%s"' "$delim" "$geo"; delim=$',\n'; }
    [[ $latest_handshake == "0" ]] || { printf '%s\t\t\t\t"latestHandshake": %u' "$delim" $(( $latest_handshake )); delim=$',\n'; }
    [[ $transfer_rx == "0" ]] || { printf '%s\t\t\t\t"transferRx": %u' "$delim" $(( $transfer_rx )); delim=$',\n'; }
    [[ $transfer_tx == "0" ]] || { printf '%s\t\t\t\t"transferTx": %u' "$delim" $(( $transfer_tx )); delim=$',\n'; }
  2. bglnelissen revised this gist Aug 8, 2021. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion wg-json-geoip.sh
    Original file line number Diff line number Diff line change
    @@ -19,6 +19,7 @@ while read -r -d $'\t' device; do
    [[ $public_key == "(none)" ]] || { printf '%s\t\t"publicKey": "%s"' "$delim" "$public_key"; delim=$',\n'; }
    [[ $listen_port == "0" ]] || { printf '%s\t\t"listenPort": %u' "$delim" $(( $listen_port )); delim=$',\n'; }
    [[ $fwmark == "off" ]] || { printf '%s\t\t"fwmark": %u' "$delim" $(( $fwmark )); delim=$',\n'; }
    printf '%s\t\t"latestUpdate": %u' "$delim" "$(date +%s)"; delim=$',\n';
    printf '%s\t\t"peers": {' "$delim"; end=$'\n\t\t}\n\t}'
    delim=$'\n'
    else
    @@ -52,4 +53,4 @@ while read -r -d $'\t' device; do

    done
    printf '%s\n' "$end"
    printf '}\n'
    printf '}\n'
  3. bglnelissen created this gist Aug 8, 2021.
    55 changes: 55 additions & 0 deletions wg-json-geoip.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    #!/bin/bash
    # SPDX-License-Identifier: GPL-2.0
    #
    # Copyright (C) 2015-2020 Jason A. Donenfeld <[email protected]>. All Rights Reserved.
    # modified by b.nelissen
    # added (~hacked) geoiplookup support

    exec < <(exec wg show all dump)

    printf '{'
    while read -r -d $'\t' device; do
    if [[ $device != "$last_device" ]]; then
    [[ -z $last_device ]] && printf '\n' || printf '%s,\n' "$end"
    last_device="$device"
    read -r private_key public_key listen_port fwmark
    printf '\t"%s": {' "$device"
    delim=$'\n'
    [[ $private_key == "(none)" ]] || { printf '%s\t\t"privateKey": "%s"' "$delim" "$private_key"; delim=$',\n'; }
    [[ $public_key == "(none)" ]] || { printf '%s\t\t"publicKey": "%s"' "$delim" "$public_key"; delim=$',\n'; }
    [[ $listen_port == "0" ]] || { printf '%s\t\t"listenPort": %u' "$delim" $(( $listen_port )); delim=$',\n'; }
    [[ $fwmark == "off" ]] || { printf '%s\t\t"fwmark": %u' "$delim" $(( $fwmark )); delim=$',\n'; }
    printf '%s\t\t"peers": {' "$delim"; end=$'\n\t\t}\n\t}'
    delim=$'\n'
    else
    read -r public_key preshared_key endpoint allowed_ips latest_handshake transfer_rx transfer_tx persistent_keepalive
    printf '%s\t\t\t"%s": {' "$delim" "$public_key"
    delim=$'\n'
    [[ $preshared_key == "(none)" ]] || { printf '%s\t\t\t\t"presharedKey": "%s"' "$delim" "$preshared_key"; delim=$',\n'; }
    [[ $endpoint == "(none)" ]] || { printf '%s\t\t\t\t"endpoint": "%s"' "$delim" "$endpoint"; delim=$',\n'; }
    [[ $endpoint == "(none)" ]] || { printf '%s\t\t\t\t"geoiplookup": "%s"' "$delim" "$(geoiplookup $(echo $endpoint | sed 's/\(.*\)\:.*/\1/g') | sed 's/.*:[\ ]*//g')"; delim=$',\n'; }
    [[ $latest_handshake == "0" ]] || { printf '%s\t\t\t\t"latestHandshake": %u' "$delim" $(( $latest_handshake )); delim=$',\n'; }
    [[ $transfer_rx == "0" ]] || { printf '%s\t\t\t\t"transferRx": %u' "$delim" $(( $transfer_rx )); delim=$',\n'; }
    [[ $transfer_tx == "0" ]] || { printf '%s\t\t\t\t"transferTx": %u' "$delim" $(( $transfer_tx )); delim=$',\n'; }
    [[ $persistent_keepalive == "off" ]] || { printf '%s\t\t\t\t"persistentKeepalive": %u' "$delim" $(( $persistent_keepalive )); delim=$',\n'; }
    printf '%s\t\t\t\t"allowedIps": [' "$delim"
    delim=$'\n'
    if [[ $allowed_ips != "(none)" ]]; then
    old_ifs="$IFS"
    IFS=,
    for ip in $allowed_ips; do
    printf '%s\t\t\t\t\t"%s"' "$delim" "$ip"
    delim=$',\n'
    done
    IFS="$old_ifs"
    delim=$'\n'
    fi
    printf '%s\t\t\t\t]' "$delim"
    printf '\n\t\t\t}'
    delim=$',\n'
    fi


    done
    printf '%s\n' "$end"
    printf '}\n'