在OS X中,您可以通过从“系统偏好设置”>“网络”>“代理服务器”中选中“Web代理(HTTP)”并指定Web代理服务器等,然后单击“确定”,再单击“应用程序”来打开或关闭Web代理。这个过程步骤太多了。是否有一种方法可以通过命令行和shell脚本完成所有操作?
对于未经身份验证的代理(并且假设您要配置以太网服务):
networksetup -setwebproxy Ethernet proxy.example.net 80 off
对于已认证用户:
networksetup -setwebproxy Ethernet proxy.example.net 80 on proxyuser "p4ssw0rd"
并将其关闭:
networksetup -setwebproxystate Ethernet off
如果网络服务名称不是"Ethernet",你可能需要解析networksetup -listallnetworkservices
或-listnetworkserviceorder
来获取正确的名称。
为在OSX Mavericks中仅切换我的代理,我设置了这个脚本。请注意,此示例仅影响我的Wi-Fi适配器。我是同时切换Web、流媒体和SOCKS代理的开/关。你可以像Gordon的例子那样设置代理地址,但我已经通过系统偏好设置 > 网络 > 代理GUI将其保存。
BASH脚本,保存为prox.sh:
#!/bin/bash
e=$(networksetup -getwebproxy wi-fi | grep "No")
if [ -n "$e" ]; then
echo "Turning on proxy"
sudo networksetup -setstreamingproxystate wi-fi on
sudo networksetup -setsocksfirewallproxystate wi-fi on
sudo networksetup -setwebproxystate wi-fi on
else
echo "Turning off proxy"
sudo networksetup -setstreamingproxystate wi-fi off
sudo networksetup -setsocksfirewallproxystate wi-fi off
sudo networksetup -setwebproxystate wi-fi off
fi
然后在命令行上创建脚本的符号链接:
ln -s /Script/Location/prox.sh prox-toggle
现在您可以在命令行上切换代理开/关:
bash prox-toggle
我准备了一个名为 proxy 的脚本,可以帮助你。
#!/bin/bash
#
#
# Author: Md. Sazzad Hissain Khan
# Date: 8 July, 2017
#
#
NETWORK_SERVICE_NAME="Ethernet"
if [ "$#" -ne 1 ]; then
echo "Argument missing [on/off]"
exit 0
fi
if [ $1 == "on" ]; then
echo "Enabling secure proxy for $NETWORK_SERVICE_NAME"
networksetup -setsecurewebproxystate "$NETWORK_SERVICE_NAME" on
elif [ $1 == "off" ]; then
echo "Disabling secure proxy for $NETWORK_SERVICE_NAME"
networksetup -setsecurewebproxystate "$NETWORK_SERVICE_NAME" off
else
echo "Argument invalid [permitted:on/off]"
fi
NETWORK_SERVICE_NAME
是您需要配置的活动网络的名称。
/usr/local/bin
目录下创建 proxy
文件。proxy
文件中。sudo chmod 777 proxy
为该文件设置可执行权限。如何使用:
proxy on
proxy off
networksetup -setwebproxystate <networkservice> <on off>
networksetup -setsecurewebproxystate <networkservice> <on off>
示例:
networksetup -setwebproxystate Wi-Fi on
networksetup -setsecurewebproxystate Wi-Fi on
sudo
中使用sudo networksetup -setwebproxystate Wi-Fi on
sudo networksetup -setsecurewebproxystate Wi-Fi on
这里有一个 Applescript 脚本可以在 Macworld 上打开和关闭代理。
使用快捷键启用和禁用代理
在终端中,您可以使用以下命令打开或关闭wifi代理
networksetup -setwebproxystate Wi-Fi <on | off>
networksetup -setsecurewebproxystate Wi-Fi <on | off>
networksetup -setwebproxystate Ethernet <on | off>
networksetup -setsecurewebproxystate Ethernet <on | off>
e=$(networksetup -getwebproxy wi-fi | grep "No")
if [ -n "$e" ]; then
networksetup -setwebproxystate Wi-Fi on
networksetup -setsecurewebproxystate Wi-Fi on
else
networksetup -setwebproxystate Wi-Fi off
networksetup -setsecurewebproxystate Wi-Fi off
fi
由于我需要一个简单的脚本,可以同时切换HTTP和HTTPS代理开/关状态,因此在这里提供:
#!/usr/bin/env bash
# Toggles *both* HTTP and HTTP proxy for a preconfigured service name ("Wi-Fi" or "Ethernet").
NETWORK_SERVICE_NAME="Wi-Fi" # Wi-Fi | Ethernet
IS_PROXY_ENABLED=$(networksetup -getwebproxy "$NETWORK_SERVICE_NAME" | head -n 1 | grep Yes)
if [ -z "$IS_PROXY_ENABLED" ]; then
echo "Enabling HTTP and HTTPs proxy for $NETWORK_SERVICE_NAME"
networksetup -setstreamingproxystate "$NETWORK_SERVICE_NAME" on
networksetup -setwebproxystate "$NETWORK_SERVICE_NAME" on
networksetup -setsecurewebproxystate "$NETWORK_SERVICE_NAME" on
else
echo "Disabling HTTP and HTTPs proxy for $NETWORK_SERVICE_NAME"
networksetup -setstreamingproxystate "$NETWORK_SERVICE_NAME" off
networksetup -setwebproxystate "$NETWORK_SERVICE_NAME" off
networksetup -setsecurewebproxystate "$NETWORK_SERVICE_NAME" off
fi
scutil
的方法,但这很可能会很混乱。为什么不想使用networksetup
? - Gordon Davisson