如何以编程方式在 mac os x 中禁用/断开以太网适配器?

Posted

技术标签:

【中文标题】如何以编程方式在 mac os x 中禁用/断开以太网适配器?【英文标题】:How to disable/disconnect ethernet adapter in mac os x programmatically? 【发布时间】:2011-12-24 03:01:28 【问题描述】:

我是 mac os x 编程的新手,刚刚得到一个任务来编写基于配置禁用无线或有线适配器的小型实用程序。我能够使用 corewlan 框架断开无线连接,例如:

CWInterface interface = [CWInterface interfaceWithName:@"en1"];
BOOL result = [interface setPower:NO error:&err];

它按预期工作。我需要类似的代码来禁用/断开以太网适配器。我研究了ifconfig(如下所述可以使用):

sudo ifconfig en0 down 

但它需要管理员密码,而我不想这样做。请建议另一种编程方式来禁用没有 root 密码的以太网适配器。

我读到 SCNetworkConfiguration 可以使用,但不知道如何使用。请帮忙。

谢谢

【问题讨论】:

这是一个替代命令(遗憾的是,即使这需要管理员密码)。 networksetup -setnetworkserviceenabled Ethernet on我从这里得到的:developer.apple.com/library/mac/documentation/Darwin/Reference/… 【参考方案1】:

如果没有管理员访问权限,您将无法关闭网络接口(也就是说,这就是挂锁出现在网络首选项窗格中的原因)。可以这样想……您不希望任何公共机器上的非管理员用户能够任意关闭网络。

对于我自己的应用程序,我也禁用了以太网和 WiFi,我必须获得启动单独工具的权限,以便以管理员身份从 SystemConfiguration 框架运行东西。

【讨论】:

感谢您的回答。所以现在还有两个问题:1)苹果是否批准需要root用户密码的应用程序? (我害怕) 2)任何以特权方式(苹果接受的方式)运行代码的例子对我都有很大的帮助。就像以管理员身份通过 SystemConfiguration frmework 运行一样。 对问题 #1 的回答是“否”,因为听起来你想在 Apple App Store 上安装这个应用程序,并且 Sandboxing 是一个要求,你不能做任何管理 -享有任何特权。看看Determine Whether Your App Is Suitable for Sandboxing section。对于我自己的应用程序,我将考虑使用 ipfw,这对于用户级应用程序可能没问题。 非常感谢您的澄清。感谢您的帮助。

以上是关于如何以编程方式在 mac os x 中禁用/断开以太网适配器?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在 Mac OS X 上创建 PPTP ***

Mac os x以编程方式获取域名

在 10.6 (Snow Leopard) 之后以编程方式设置 Mac OS X 音量

在 Mac OS X 上以编程方式为 Matplotlib 选择正确的后端

以编程方式在 Mac OS X 上创建 L2TP ***

以编程方式配置 Mac OS X MIDI