-
-
Save zx2c4/1ad796372619ad76cf9526cbf9938973 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
short_route() { | |
ip route | sed -n "s/$1 \\(.* dev [^ ]\\+\\).*/\\1/p" | head -n 1 | |
} | |
resolve_ip() { | |
local filter='/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$/{p;q;}' | |
[[ $(sed -n "$filter" <<<"$1") == "$1" ]] && echo "$1" || | |
host -t a "$1" | cut -d ' ' -f 4 | sed -n "$filter" | |
} | |
set_route() { | |
local default_route="$(short_route default)" | |
[[ -n $default_route ]] || { echo "[-] Could not determine default route"; return; } | |
echo "[+] Adding route for $1 to be $default_route" | |
ip route del "$1/32" 2>/dev/null | |
ip route add "$1/32" $default_route | |
} | |
check_loop() { | |
local ip="$(resolve_ip "$1")" | |
[[ -n $ip ]] || { echo "[-] Could not determine IP of '$1'" && return 1; } | |
echo "[+] Making sure $ip goes over the default (non-0/1,128/1) route" | |
set_route "$ip" | |
while read; do | |
[[ $(short_route "$ip") != "$(short_route default)" ]] && set_route "$ip" | |
done < <(exec ip monitor route) | |
} | |
[[ $# -ne 1 ]] && { echo "Usage: $0 IP|HOST" >&2; exit 1; } | |
[[ $UID -ne 0 ]] && exec sudo "$(readlink -f "$0")" "$@" | |
check_loop "$1" | |
exit $? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment