Macos 如何从命令行在os x中打开和关闭web代理

Macos 如何从命令行在os x中打开和关闭web代理,macos,networking,proxy,Macos,Networking,Proxy,在OSX中,通过检查web代理(HTTP)并指定web代理服务器等,然后单击“确定”,然后单击“应用”,可以从“系统首选项”>“网络”>“代理”打开和关闭web代理。这个步骤太多了。有没有办法通过命令行和shell脚本来完成这一切?这里有一个Applescript,可以在macworld上打开和关闭代理 对于未经身份验证的代理(假设它是您要配置的以太网服务): 对于已验证的: networksetup -setwebproxy Ethernet proxy.example.net 80 on

在OSX中,通过检查web代理(HTTP)并指定web代理服务器等,然后单击“确定”,然后单击“应用”,可以从“系统首选项”>“网络”>“代理”打开和关闭web代理。这个步骤太多了。有没有办法通过命令行和shell脚本来完成这一切?

这里有一个Applescript,可以在macworld上打开和关闭代理


对于未经身份验证的代理(假设它是您要配置的以太网服务):

对于已验证的:

networksetup -setwebproxy Ethernet proxy.example.net 80 on proxyuser "p4ssw0rd"
要关闭它,请执行以下操作:

networksetup -setwebproxystate Ethernet off

如果网络服务的名称不仅仅是“Ethernet”,您可能需要解析
networksetup-listallnetworkservices
-listnetworkserviceorder
,以获得正确的名称。

要在OSX Mavericks中打开/关闭我的代理,我设置了此脚本。请注意,此示例仅影响我的wi-fi适配器。我正在同时切换网络、流媒体和SOCKS代理。您也可以根据设置代理地址,但我已经通过系统首选项>网络>代理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
现在,您可以在命令行上打开/关闭代理:

ln -s /Script/Location/prox.sh prox-toggle
bash prox-toggle

只需切换:)

networksetup -setwebproxystate <networkservice> <on off>
networksetup -setsecurewebproxystate <networkservice> <on off>
处理修改警报:前缀
sudo
like

sudo networksetup -setwebproxystate  Wi-Fi on
sudo networksetup -setsecurewebproxystate  Wi-Fi on

我准备了一个名为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\u SERVICE\u NAME
是您需要配置的活动网络的名称

  • /usr/local/bin中创建
    代理
    文件。
  • 将上述脚本复制到代理中。
  • 使用sudo chmod 777代理设置文件的可执行权限 如何使用:

    proxy on
    proxy off
    

    使用键盘快捷键启用和禁用代理

    在终端中,您可以使用这些命令关闭和打开wifi代理

    networksetup -setwebproxystate Wi-Fi <on | off>
    networksetup -setsecurewebproxystate Wi-Fi <on | off>
    
    创建运行shell命令的键盘快捷键

  • 启动Automator,并创建一个新服务

  • 将“任何应用程序”中的“已选择服务接收:设置为“无输入”

  • 添加一个名为“运行Shell脚本”的操作。它位于操作库的实用程序部分

  • 将所需的bash命令插入文本框,并使用run按钮(右上角)测试运行它。它应该执行脚本所执行的任何操作(关闭、打开或切换),并且操作下方应该有绿色标记

  • 保存它,给它一个你能记住的服务名称

  • 转到系统首选项->键盘,然后转到快捷键选项卡

  • 转到“服务”部分,向下滚动到“常规”-您应该可以在那里找到您的服务。如果您选择该行,您可以单击“添加快捷方式”,并为其提供键盘快捷方式


  • 由于我需要一个简单的脚本,它将同时打开/关闭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
    

    第一个命令不应该以
    on
    结束,而不是以
    off
    结束吗?@mejpark“off”和“on”结束“关键字指的是身份验证,而不是代理设置本身是开还是关。@AkinHwan使用
    scutil
    可能有办法做到这一点,但它可能会很混乱。”。如果我没有管理员权限,为什么不使用
    networksetup
    ?@GordonDavisson,因为它会提示我输入用户名password@AkinHwan更改网络设置(包括代理配置)本质上需要管理员权限。您可能可以覆盖特定应用程序(浏览器等)中的网络设置,但这取决于应用程序。@potato eat apple写道:Eric感谢您的脚本,有一个问题:它总是弹出窗口让我输入机器密码。如何避免这种情况?太棒了。我已在上为HTTP代理添加了networksetup-setwebproxystate“$NETWORK\u SERVICE\u NAME:)
    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
    
    #!/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