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

标签 macos cocoa proxy ip-address

如何以编程方式更改 mac osx 上的代理设置。我对ios很流利,而且由于mac os编程类似,所以应该不会有太多问题。然而,我缺乏以编程方式创建代理更改所需的逻辑。手动调整非常容易。这是我所追求的系统偏好设置中的网络选项卡:

enter image description here

我尝试过的:

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

我的想法已经用完了。

最佳答案

来自this answer ,这是一个示例脚本:

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

最后一个命令给出了空的标准输出,这意味着成功。

另请参阅man networksetup .

How to execute a shell command from a Cocoa app .

从终端应用程序执行的上述命令要求授权。抱歉,我不确定您是否可以“按原样”保留它(只需启动您的 NSTask,OS X 将完成剩下的工作),或者您需要通过 SFAuthorization 获取正确的凭据。在此之前。

关于macos - 以编程方式更改 mac osx 上的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36127254/

相关文章:

c++ - 以 root 身份运行时如何获取用户的语言环境?

xcode - 我如何告诉我的 UITextField(代码)放弃第一响应者?

macos - 更改高亮显示的NSButton背景颜色

swift - 将网页 View 内容保存为 pdf 文件

browser - 浏览器可以通过 SSL/TLS 连接到代理吗?

c++ - C++:获取MacOS版本

objective-c - 无法将 NSData 放入 NSMutableArray

objective-c - 从 CFDictionary 获取值

angular - 测试 npm 是否通过 visual studio 2015 的代理连接

node.js - 你如何在 Electron 应用程序中处理 CORS?