Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 以编程方式更改mac osx上的代理_Macos_Cocoa_Proxy_Ip Address - Fatal编程技术网

Macos 以编程方式更改mac osx上的代理

Macos 以编程方式更改mac osx上的代理,macos,cocoa,proxy,ip-address,Macos,Cocoa,Proxy,Ip Address,如何以编程方式更改mac osx上的代理设置。我精通ios,而且由于mac os编程与之类似,所以应该不会有太多问题。但是,我缺乏以编程方式创建代理更改所需的逻辑。。手动调整非常容易。这是我关注的系统首选项中的网络选项卡: 我所尝试的: let dynamicStore: SCDynamicStoreRef = SCDynamicStoreCreate(nil, "setProxy" as CFString, nil, nil)! let updated = SCDynamicStoreSet

如何以编程方式更改mac osx上的代理设置。我精通ios,而且由于mac os编程与之类似,所以应该不会有太多问题。但是,我缺乏以编程方式创建代理更改所需的逻辑。。手动调整非常容易。这是我关注的系统首选项中的网络选项卡:

我所尝试的:

let dynamicStore: SCDynamicStoreRef = SCDynamicStoreCreate(nil, "setProxy" as CFString, nil, nil)!
let updated = SCDynamicStoreSetValue(dynamicStore, "HTTPProxy" as CFStringRef, "111.222.333.1") // updated is false, indicating unsuccessful operation 
也尝试了此操作,但返回的词典是只读的

let dynamicStore: SCDynamicStoreRef = SCDynamicStoreCreate(nil, "myFunc" as 

    CFString, nil, nil)!

    let proxyDict = SCDynamicStoreCopyProxies(dynamicStore)

    if let proxyDict = SCDynamicStoreCopyProxies(dynamicStore) as NSDictionary? {
        if let port = proxyDict["HTTPPort"] as? Int {
            print("HTTPPort:", port)
            proxyDict["HTTPPort"] = 8088; // can't do that
        }
    }
我的想法快用完了。

从,这里是一个示例脚本:

e=$(networksetup -getsocksfirewallproxy wi-fi | grep "No")

if [ -n "$e" ]; then
  echo "Turning on proxy"
  networksetup -setsocksfirewallproxystate wi-fi on
else
  echo "Turning off proxy"
  networksetup -setsocksfirewallproxystate wi-fi off
fi
它切换(打开/关闭)用户Wi-Fi连接的SOCKS代理

你可以用这个想法来制作适合你需要的脚本。您可以在bash脚本或Cocoa中实现所需的逻辑

  • 使用
    networksetup-listallnetworkservices
    列出所有连接
  • 使用
    networksetup-setwebproxy
    为特定连接设置代理
例如,以下是我的终端输出:

$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
MBBEthernet
Wi-Fi
Wi-Fi Modem Yota 4G LTE
Bluetooth PAN
Thunderbolt Bridge
iPhone

$ networksetup -setwebproxy some bad args
** Error: The parameters were not valid.

$ networksetup -setwebproxy Wi-Fi 1.2.3.4 8080
最后一个命令给出了空的stdout,这意味着成功

另见


从终端应用程序执行的上述命令请求授权。很抱歉,我不确定您是否可以让它保持“原样”(只需启动您的
NSTask,OS X将完成其余工作),或者您需要先通过获取适当的凭据,然后再执行此操作。

cfDictionaryCreateMatableCopy
将完成此操作,但即使您成功更改了词典,
SCDynamicStoreSetMultiple
只是没有效果