RSS

Mac OS X中通过程序修改系统网络设置的proxies

05

希望在Mac OS X中通过SSH代理上网的朋友请查看Mac OS X中使用SSH连接Dreamhost建立SOCKS代理上网。本文仅探讨通过程序(Objective-C或者Shell)修改设置中的代理选项。

遇到的问题:
在Mac OS X中,希望通过程序修改System Preferences->Network->AirPort->Advanced->Proxies->SOCKS Proxy的勾选或者说是SOCKSEnable的状态。

解决方案:
使用命令行工具/ usr/sbin/networksetup,networksetup -setsocksfirewallproxystate “AirPort” “on” 即可启用AirPort的SOCKS Proxy,networksetup -setsocksfirewallproxy “AirPort” “127.0.0.1″ “7070″ 即可修改AirPort的SOCKS Proxy Server为127.0.0.1,端口为7070,同时启用SOCKS Proxy。
知道networksetup之后,再通过NSTask执行上述的命令相信大家都会,就不再赘述了。
当然,networksetup实际上是非常强大的,想要了解更多networksetup的用法请查看networksetup Mac OS X的Manual Page

至于通过SystemConfiguration Framework和Security Framework的Authorization来修改Mac OS X的网络设置,目前SCDynamicStoreSetNotificationKeys是可以监测网络设置的变动,但是即使AuthorizationCopyRights成功之后,SCDynamicStoreSetValue依然失败,会返回如下信息:
Error Domain=com.apple.SystemConfiguration Code=1003 “The operation couldn’t be completed. (com.apple.SystemConfiguration error 1003 – Permission denied)” UserInfo=….{NSDescription=Permission denied}“ 。
如果之后有时间回头再看看SystemConfiguration Framework和Security Framework,并解决了这个问题,我也会更新在这里的。

详情如下:
这篇低素质一点,尼玛这么丁点的问题,我做了三天了愣没解决。

从Apple开发者中心的文档开始,看了SystemConfiguration Framework,Security Framework。从我做iPhone应用开发开始,对苹果官方文档的良好印象就此终结了啊!!!就没见过这么敷衍塞责的文档啊!!!概念就是一大串一大串,不解释完全不懂的啊,我看了三天了整个文档看下来了代码就没超过一百行啊!!!说好有Sample的,链接直接就失效啊!!!

按照他文档中的代码写出来的东西会出错的啊,出错方式还是隐藏的啊!!!我原来一直以为是自己没写对,直到在网上看到怎么打印错误信息,才知道是授权部分出了问题啊!!!!

网上搜,百度根本就木有的啊!!!Google搜出来的东西,除了各种论坛无人回答,各种list没有响应,就是StackOverFlow啊!!!StackOverFlow上面就两篇还是三篇文章啊!!!一篇跟我一模一样的问题,没有人回答啊!!!一篇的答案是看SystemConfiguration Framework,给官方的链接啊,链接啊!!还有一篇答案是需要root privileges,尼玛什么root privileges啊????我又搜,搜了尼玛半天,还是要用Security Framework啊!!!!

我就疯了,确实有人碰到这问题啊!!!确实有人说能解决啊!!!尼玛解决方案呢????看你妹的官方文档啊!!!靠,花了至少二十个小时在这屁大点问题上了,今天解决了晚上就把这篇文章改了,写个解决方案。解决不了就算了,也不浪费时间了。

update:
好吧,workaround了。


 
2 Comments

Posted by on 一月 5, 2012 in Mac OS, Objective-C

 
转载请注明原文链接:http://www.1mima.com/?p=45

Tags: , , , , , , , , ,

2 Responses to Mac OS X中通过程序修改系统网络设置的proxies

  1. Xiaoxia

    七月 22, 2012 at 02:08

    Hi, 研究了一整天,我也弄好全局代理的设置了,需要root权限。用了 SCPreferencesPathGetValue和 SCPreferencesPathSetValue。

    我试过SCDynamicStoreSetValue,但是没有效果!改天我也写个博文,把代码分享出来 :)

     
    • Alen

      七月 23, 2012 at 13:01

      哈哈,回头记得在这边留个链接。

       

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>