从UUID中提取MAC地址

时间:2008-12-01 03:13:52

标签: c++ windows uuid

我工作的程序假定Windows RPC API调用UuidCreateSequential()生成的UUID包含主以太网适配器的MAC地址。这个假设是正确的还是我应该使用不同的方法来获取MAC地址?

4 个答案:

答案 0 :(得分:5)

我不会依赖于此 - UuidCreateSequential拥有MAC地址的唯一原因是它试图保证UUID在整个网络中是唯一的。另外,为什么你会用这种奇怪的方式来获取MAC地址?使用WMI和实际请求MAC地址而不是UUID创建功能的副作用。

答案 1 :(得分:4)

这似乎是一个有效的假设。 MSDN上的文档明确说明这将包含计算机上以太网卡的地址。它没有提到有关多卡情况的任何内容,但选择主卡似乎是一个逻辑上的飞跃。

答案 2 :(得分:2)

如果您正在编写托管代码,我会使用NetworkInterface类并致电GetAllNetworkInterfaces()。或者从C ++代码中,调用GetAdaptersInfo,这是托管实现所使用的。

即使UuidCreateSequential对此有用,但这是获取信息的一种非常模糊的方式,并隐藏了具有多个适配器的计算机等潜在问题。

答案 3 :(得分:1)

只有版本1 UUID包含MAC地址,并且仅当原始生成器有权访问MAC地址时才开始。如果原始生成器无法访问MAC地址,则根据RFC 4122的4.5节,它将使用来自加密安全随机数生成器的6个随机字节。因此,无法保证MAC地址在UUID中给出的实际上是MAC地址。

在大多数情况下,任何人需要从UUID解析MAC地址的唯一原因是出于法医目的。例如,参见Melissa病毒的Word文档有效负载中嵌入的UUID。调查人员从这些ID中提取MAC地址,并将其与嫌疑人主网络适配器的MAC地址相匹配。

如果您尝试获取自己计算机的MAC地址,可以采用更好的方法解决此问题。