如何以编程方式获取OSX网络服务的连接状态?

时间:2010-06-16 16:48:02

标签: macos systems-programming

在OS X系统偏好设置中,当我点击“网络”时,我会看到“以太网”的绿点,“AirPort”和“FireWire”的红点。这是因为当我通过以太网访问网络和互联网时,我关闭了AirPort和FireWire。

我需要以编程方式确定“系统偏好设置”中显示的这些网络服务中有哪些具有绿点,哪些具有红点。对于以太网和FireWire,显示的状态为“已连接”或“未连接”,对于AirPort,显示的状态为“开启”或“关闭”。也许其他网络服务还有其他状态标签。

我已经选择了'/ Library / Preferences / SystemConfiguration'中的所有plist文件,特别是'preferences.plist'和'NetworkInterfaces.plist'。我可以在那里获得各种信息,例如位置设置,网络服务订单,代理信息(这对我的任务也很重要),但我找不到如何确定给定的网络服务是打开还是关闭 - 相当于显示绿点。

我也尝试过使用系统配置框架,特别是SCNetworkConnectionGetStatus函数,但我得到的都是无效的连接状态。

有谁知道如何实际检索此连接状态信息?

感谢。

1 个答案:

答案 0 :(得分:0)

控制面板中的绿色和红色点通常与OSX上ifconfig命令的输出相关。

通常,它可能因计算机而异,en0将是以太网端口,en1是机场。 (至少在我使用的所有Macbook专业人员身上)

看起来您可以使用ifconfig -m来获取有关支持的媒体的信息。

$ ifconfig -m en0
en0: flags=8863 mtu 1500
    ether (redacted)
    media: autoselect
    status: inactive
    supported media:
        media autoselect
        media 10baseT/UTP mediaopt half-duplex
        media 10baseT/UTP mediaopt full-duplex
        media 10baseT/UTP mediaopt full-duplex mediaopt hw-loopback
        media 10baseT/UTP mediaopt full-duplex mediaopt flow-control
        media 100baseTX mediaopt half-duplex
        media 100baseTX mediaopt full-duplex
        media 100baseTX mediaopt full-duplex mediaopt hw-loopback
        media 100baseTX mediaopt full-duplex mediaopt flow-control
        media 1000baseT mediaopt full-duplex
        media 1000baseT mediaopt full-duplex mediaopt hw-loopback
        media 1000baseT mediaopt full-duplex mediaopt flow-control
        media none

看到10xxbaseT通常是以太网的好兆头。

无线似乎没有报告任何支持的媒体。

ifconfig的手册页有大量的信息,但可能有一些系统库以编程方式访问我不知道的信息,但这应该让你开始。