|
|
|
# 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 |