C++ OSX上“主网络接口”的精确定义
我正在考虑在OSX上使用MAC地址作为机器标识符的一部分。developer.apple.com上的GetPrimaryMACAddress.c示例演示了如何获取主以太网接口的MAC地址。我的问题是主以太网接口的精确定义是什么?评论将其描述为内置网卡。在具有多个内置接口的系统上会发生什么情况?例如,Mac Pros可以有两个有线插头,而较旧的Macbook Pros则有一个有线和无线插孔C++ OSX上“主网络接口”的精确定义,c++,objective-c,macos,networking,mac-address,C++,Objective C,Macos,Networking,Mac Address,我正在考虑在OSX上使用MAC地址作为机器标识符的一部分。developer.apple.com上的GetPrimaryMACAddress.c示例演示了如何获取主以太网接口的MAC地址。我的问题是主以太网接口的精确定义是什么?评论将其描述为内置网卡。在具有多个内置接口的系统上会发生什么情况?例如,Mac Pros可以有两个有线插头,而较旧的Macbook Pros则有一个有线和无线插孔 我能找到的关于这个的唯一文档是IONetworkInterface.h参考。它将kIOPrimaryInte
我能找到的关于这个的唯一文档是IONetworkInterface.h参考。它将kIOPrimaryInterface定义为描述接口是主接口还是内置网络接口。这并没有回答我关于当有多个内置接口时会发生什么的问题。根据苹果的开源页面 我想您正在寻找这个特定的代码
在我看来,任何不在插槽中的以太网卡都是主接口,因此可以有多个主接口。这与我在问题中提到的developer.apple.com示例中的一条评论相矛盾,他们声称您应该只有一条。我还担心ifdef uuu ppc uuu宏。x86怎么样,除非这里的ppc不是指体系结构?此外,从链接文件评论中的版权声明来看,这段代码可能很旧,这可能解释了ppc的问题。从代码的日期来看,它不是PowerPC而不是x86,它是PowerPC而不是Motorola 68K。标记为uuppc_uuuu的代码分支可能适用于x86。如果您有多个内置端口->只有0是主端口。如果你有无线以太网和以太网->你有2个初级。在示例代码中,您循环遍历结果并获取最后一个。@xhruso00 Aha!所以你可以有不止一个。拿最后一个似乎不是个好主意。我看不到任何迹象表明此列表的顺序是有保证的。不过,这个案子很容易处理。谢谢@当我今天早些时候评论你更新了答案时,我没有注意到。更新回答了我的问题:主要是单元号为0的接口。我们在带有两个有线以太网接口和一个无线接口的Mac Pro上进行了测试。其中一个有线接口被选为主要接口。机器通过无线接口连接到互联网。我不知道主要网络接口的正式定义,但我猜如果有一个BSD名称为en0的,您可以将其视为主要接口。请注意,您可以使用SystemConfiguration.framework中的函数查找网络地址。
//------------------------------------------------------------------------------
// 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;
}