Skip to content

Instantly share code, notes, and snippets.

@andriitishchenko
Forked from refo/macOS proxy settings from terminal.md
Last active December 12, 2022 21:37
Show Gist options
  • Save andriitishchenko/2c00435eb9c355fb41bf968deca006a1 to your computer and use it in GitHub Desktop.
Save andriitishchenko/2c00435eb9c355fb41bf968deca006a1 to your computer and use it in GitHub Desktop.
macOS proxy settings from terminal
# Macos Proxy Helper (networksetup wraper)
# add this line to $HOME/.zshrc
#
# source "$HOME/.proxy_helper"
#
# usage :
# proxy < | up | down > [-all || -http|-https|-socks|-ftp|-stream ]
# proxy set <destination> <port> [-http|-https|-socks|-ftp|-stream || -all]'
if [[ "$(uname -sr)" =~ "Darwin*" ]] ;then
proxy_read_otps(){
proxies=()
# Additional options:
# [-getgopherproxy networkservice]
# [-setgopherproxy networkservice domain portnumber authenticated username password]
# [-setgopherproxystate networkservice on | off]
# [-getproxybypassdomains networkservice]
# [-setproxybypassdomains networkservice domain1 [domain2] [...]]
# [-getpassiveftp networkservice]
while [[ $# -gt 0 ]]; do
key="$1"
case "$key" in
-https)
proxies+=("-setsecurewebproxy")
;;
-http)
proxies+=("-setwebproxy")
;;
-socks)
proxies+=("-setsocksfirewallproxy")
;;
-ftp)
proxies+=("-setftpproxy")
;;
-stream)
proxies+=("-setstreamingproxy")
;;
-all)
proxies=("-setsecurewebproxy" "-setwebproxy" "-setsocksfirewallproxy" "-setftpproxy" "-setstreamingproxy")
break
;;
esac
shift
done
echo "${proxies[@]}"
}
proxy_set_fn(){
if [ $# -le "3" ]; then
echo '** Error: expected arguments: <service_name> <destination> <port> [-http|-https|-socks|-ftp|-stream || -all]' >&2
return 1
fi
service="${1}"
destination="${2}"
port="${3}"
proxies=( $( proxy_read_otps "$@" ) )
if [ "${#proxies[@]}" -gt 0 ]; then
for proxy in "${proxies[@]}"; do
networksetup "$proxy" "$service" "$destination" "$port"
sleep 1
done
# activate
original_args=("$@") #remove first 3 args
proxy_service_fn up "${original_args[@]:3}"
else
echo '** Error: no proxy type' >&2
return 1
fi
}
proxy_service_fn(){
st=""
service="$(networksetup -listnetworkserviceorder | grep -B1 "$(route get default | awk '/interface/ {print $2}')" | awk -F'\\) ' '/\([0-9]+\)/ {print $2}')"
if [ $# -le "0" ]; then
proxies=( $( proxy_read_otps "-all" ) )
else
proxies=( $( proxy_read_otps "$@" ) )
fi
if [ "up" = "${1}" ]; then
st="on"
elif [ "down" = "${1}" ]; then
st="off"
elif [ "set" = "${1}" ]; then
args=("$@") # remove "set"
proxy_set_fn "$service" "${args[@]:1}"
return
fi
if [ "${st}" ]; then
if [ "${#proxies[@]}" -gt 0 ]; then
for proxy in "${proxies[@]}"; do
networksetup "${proxy}state" "$service" "$st"
done
else
echo '** Error: no proxy type' >&2
return 1
fi
fi
for proxy in "${proxies[@]}"; do
echo "* $(echo "$proxy" | sed -E 's/(-set|proxy)//g') $( networksetup $(echo "$proxy" | sed s/set/get/) "$service" | head -n 1 )"
done
}
alias proxy="proxy_service_fn"
fi

macOS firewall settings

Set socks proxy

networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 7070

Get current socks proxy settings and state

networksetup -getsocksfirewallproxy Wi-Fi
Enabled: Yes
Server: 127.0.0.1
Port: 7070
Authenticated Proxy Enabled: 0

Set socks proxy state (enable/disable)

networksetup -setsocksfirewallproxystate Wi-Fi on
networksetup -setsocksfirewallproxystate Wi-Fi off
echo "Enabling proxy"
# Set macOS socks proxy to local proxy
networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 7070
# enable macOS socks proxy
networksetup -setsocksfirewallproxystate Wi-Fi on
# create a local socks proxy to remote host
ssh -D 7070 -NCq [email protected]
# proxy stays open until termination
echo ""
echo "Disabling proxy"
# disable macOS socks proxy upon closing the connection
networksetup -setsocksfirewallproxystate Wi-Fi off
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment