如何通过node.js在Mac OS上以编程方式设置网络代理

时间:2019-07-05 10:24:07

标签: node.js macos electron electron-builder

我正在构建一个电子项目,其中一部分将以编程方式在Mac OS上设置系统网络代理。

似乎没有内置的系统api(无论是来自nodejs还是来自electronic)都无法实现这一目标。作为替代方案,我设法通过使用child_process模块​​取消“ networksetup”命令来更改代理。但是每次撤销都会弹出以下对话框,提示输入密码很烦人。

screenshot

var cp = require('child_process')
cp.exec(`networksetup -setproxyautodiscovery eth0 off`, function (error, stdout, stderr) {
    if (error) {
        console.log(error)
    }
})
cp.exec(`networksetup -setautoproxystate eth0 off`, function (error, stdout, stderr) {
    if (error) {
        console.log(error)
    }
})
cp.exec(`networksetup -setwebproxystate eth0 off`, function (error, stdout, stderr) {
    if (error) {
        console.log(error)
    }
})

上面的代码段将在撤消时弹出3次。在开发阶段,我可以授予root特权来缓解此问题(sudo node test.js)。

我正在寻求帮助,以解决打包后的问题(分发给用户后,要求用户以root特权在终端中运行该应用程序是不可能的,也不是用户友好的)。我的期望是要求用户在应用程序启动期间授予一次特权。在应用执行期间不再授予任何权限。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您应该尝试scutil。有关更多信息,请参见man scutil

答案 1 :(得分:-1)

ShadowsocksX-NG中的

proxy_conf_helper作为替代。 这是参考链接。

shadowsocks/ShadowsocksX-NG