OSX上“主网络接口”的精确定义

时间:2014-08-13 19:47:48

标签: c++ objective-c macos networking mac-address

我正在考虑将MAC地址用作OSX上的机器标识符的一部分。 developer.apple.com上的GetPrimaryMACAddress.c示例演示了如何获取“主”以太网接口(https://developer.apple.com/library/mac/samplecode/GetPrimaryMACAddress/Listings/GetPrimaryMACAddress_GetPrimaryMACAddress_c.html)的MAC地址。我的问题是“主以太网接口的精确定义是什么?”评论将其描述为“内置”网卡。在具有多个内置接口的系统上会发生什么?例如Mac Pro可以有两个有线插头,而较旧的Macbook Pro有一个有线和无线插孔。

我能找到的唯一文档是IONetworkInterface.h参考(https://developer.apple.com/library/mac/documentation/Kernel/Reference/IONetworkInterface_header_reference/Reference/reference.html)。它将kIOPrimaryInterface定义为“接口是主接口还是内置网络接口”。这并没有回答我关于当有多个内置接口时会发生什么的问题。

1 个答案:

答案 0 :(得分:0)

Apple位于here

的开源页面

我认为您正在寻找此特定代码/* Returns a Base-64 encoded MD5 hash of 'username:primary-mac-address' */

//------------------------------------------------------------------------------
// Returns true if the receiver of this method is the system's primary
// network interface.

bool IONetworkInterface::isPrimaryInterface() const
{
    IOService * provider  = _driver;
    bool        isPrimary = false;

    if ( provider ) provider = provider->getProvider();

    // Look for the built-in property in the ethernet entry.

    if ( provider && provider->getProperty("built-in") && getUnitNumber() == 0)
    {
        isPrimary = true;
    }

    return isPrimary;
}