Created
November 3, 2022 12:51
-
-
Save luqasn/e5aff3542a0d8a4794e4bfe9e90cfbf5 to your computer and use it in GitHub Desktop.
Revisions
-
luqasn created this gist
Nov 3, 2022 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,122 @@ #!/usr/bin/env bash # # DNS Switcher # The list of DNS options should be defined on this file # # rewrite of https://github.com/matryer/bitbar-plugins/blob/master/Network/dnsswitcher.1d.sh # by M Saiqul Haq (@saiqulhaq) # # <xbar.title>DNS Switcher</xbar.title> # <xbar.version>v2.1.7-beta</xbar.version> # <xbar.author>Lucas Romero</xbar.author> # <xbar.author.github>luqasn</xbar.author.github> # <xbar.desc>Switch DNS to your defined DNS options.</xbar.desc> # Configuration # add or remove list of DNS options below, don't forget to make it enabled. see below # shellcheck disable=2034 cloudflare="1.1.1.1 1.0.0.1" # shellcheck disable=2034 google="8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844" # shellcheck disable=2034 level3="209.244.0.3 209.244.0.4 4.2.2.1 4.2.2.2 4.2.2.3 4.2.2.4" # shellcheck disable=2034 opendns="208.67.222.222 208.67.220.220" # shellcheck disable=2034 norton="199.85.126.10 199.85.127.10 199.85.126.20 199.85.127.20 199.85.126.30 199.85.127.30" localhost="127.0.0.1" # shellcheck disable=2034 default="empty" enabled_dns_address=(default localhost) ######################## get_interface() { while read -r line; do sname="$(echo "$line" | sed -E 's|(.*) \(Hardware Port: (.+), Device: (.+)\)|\1|')" sdev="$(echo "$line" | sed -E 's|(.*) \(Hardware Port: (.+), Device: (.+)\)|\3|')" if [ -n "$sdev" ]; then ifout="$(ifconfig "$sdev" 2>/dev/null)" echo "$ifout" | grep 'status: active' > /dev/null 2>&1 rc="$?" if [ "$rc" -eq 0 ]; then echo "$sname" break fi fi done <<< "$(networksetup -listnetworkserviceorder | awk 'BEGIN { RS = "\\([0-9]\+\\) " ; FS = "\n" } { print $1, $2 }')" if [ -z "$currentservice" ]; then >&2 echo "Could not find current service" exit 1 fi } flushcache(){ killall -HUP mDNSResponder &>/dev/null sudo killall mDNSResponderHelper &>/dev/null sudo dscacheutil -flushcache &>/dev/null } selected_dns="Unknown" network_service="$(get_interface)" current_dns_output=$(networksetup -getdnsservers "$network_service") if [[ $current_dns_output == There* ]] # For e.g. "There aren't any DNS Servers set on Wi-Fi." then selected_dns="default" else IFS=', ' read -r -a current_dns_address <<< "$current_dns_output" for dns_name in "${enabled_dns_address[@]}" do for current_dns in "${current_dns_address[@]}" do dns_option="${!dns_name}" if [[ $dns_option == *"$current_dns"* ]] then selected_dns="$dns_name" fi done done fi get_interfaces return ### Bitbar Menu if [[ $selected_dns == "Unknown" ]] then echo "Unrecognized DNS" else echo "$selected_dns" fi echo "---" for dns_name in "${enabled_dns_address[@]}" do echo "$dns_name | shell=$0 | param1='${dns_name}' | terminal=false | refresh=true" done case "$0" in *\ * ) echo "Your script path | color=#ff0000" echo "($0) | color=#ff0000" echo "has a space in it, which BitBar does not support. | color=#ff0000" ;; esac if [ ! -z "$1" ]; then networksetup -setdnsservers "$network_service" ${!1} /usr/bin/osascript -e "do shell script \"flushcache\" with prompt \"DNS caches should be flushed after switching servers.\" with administrator privileges" fi