Skip to content

Instantly share code, notes, and snippets.

@bwmorales
Created July 16, 2018 00:00
Show Gist options
  • Save bwmorales/5576111997b0f4ce2f93b2af2092a678 to your computer and use it in GitHub Desktop.
Save bwmorales/5576111997b0f4ce2f93b2af2092a678 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Example given with Wireshark. Script tests ping times for Wireshark's mirrors and selects the fastest.
MIRRORS=(
'1.as.dl.wireshark.org'
'1.eu.dl.wireshark.org'
'1.na.dl.wireshark.org'
'2.na.dl.wireshark.org'
# 'www.wireshark.org'
)
getMirrorSpeeds(){
for MIRROR in ${MIRRORS[@]}; do
PING_TIME="$(/sbin/ping -c1 -W 2000 "$MIRROR" | /usr/bin/grep -oE 'time=.*\..* ms' | /usr/bin/tr -d 'a-zA-Z =')"
if [[ "$PING_TIME" == '' ]]; then
PING_TIME="2000.000"
fi
/usr/bin/printf "%s\n" "$PING_TIME"
done
}
OIFS=$IFS
IFS=$'\n'
MIRROR_SPEEDS=($(getMirrorSpeeds))
# for (( n = 0; n < ${#MIRROR_SPEEDS[@]}; n++ )); do
# /usr/bin/printf "%s = %s\n" "${MIRRORS[$n]}" "${MIRROR_SPEEDS[$n]}"
# done
KEY_INDEX="0"
IFS='.' read -r -a FASTEST_MIRROR <<< "${MIRROR_SPEEDS[0]}"
for (( i = 0; i < ${#MIRROR_SPEEDS[@]}; i++ )); do
IFS='.' read -r -a CONTESTANT <<< "${MIRROR_SPEEDS[(( $i + 1 ))]}"
for (( l = 0; l<${#CONTESTANT[@]}; l++ )); do
if [[ ${FASTEST_MIRROR[l]} -eq ${CONTESTANT[l]} ]]; then
: # /usr/bin/printf "${FASTEST_MIRROR[l]} equals ${CONTESTANT[l]}\n"
elif [[ ${FASTEST_MIRROR[l]} -gt ${CONTESTANT[l]} ]]; then
KEY_INDEX="$(( $i + 1 ))"
# /usr/bin/printf "NEW FASTEST: %s\n" "$KEY_INDEX"
# /usr/bin/printf "${FASTEST_MIRROR[l]} greater than ${CONTESTANT[l]}\n"
IFS='.' read -r -a FASTEST_MIRROR <<< "${MIRROR_SPEEDS[(( $i + 1 ))]}"
break
else
# /usr/bin/printf "${FASTEST_MIRROR[l]} is less than ${CONTESTANT[l]}\n"
break
fi
done
done
SELECTED_MIRROR="${MIRRORS[$KEY_INDEX]}"
# /usr/bin/printf "\t\tFASTEST MIRROR: %s\n" "$SELECTED_MIRROR"
# /usr/bin/printf "\t\tINSTALLER VERSION: %s\n" "${INSTALLER_VERSION}"
/usr/bin/printf "https://%s/osx/Wireshark%%20%s%%20Intel%%2064.dmg" "$SELECTED_MIRROR" "${INSTALLER_VERSION}"
IFS=$OIFS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment