4

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

4

4 回答 4

6

我不会依赖这个 - UuidCreateSequential 具有 MAC 地址的唯一原因是它试图保证 UUID 在整个网络中是唯一的。另外,为什么要使用这种奇怪的方式来获取 MAC 地址?使用 WMI 并实际询问 MAC 地址,而不是 UUID 创建函数的副作用。

于 2008-12-01T03:17:54.427 回答
4

这似乎是一个有效的假设。MSDN上的文档特别说明这将包含机器上以太网卡的地址。它没有提及多卡场景,但选择主卡似乎是一个合乎逻辑的飞跃。

于 2008-12-01T03:16:29.720 回答
3

如果您正在编写托管代码,我会使用NetworkInterface该类并调用GetAllNetworkInterfaces(). 或者来自 C++ 代码, call GetAdaptersInfo,这是托管实现使用的。

即使UuidCreateSequential确实适用于此,它也是一种获取信息的非常晦涩的方式,并且隐藏了潜在问题,例如具有多个适配器的计算机。

于 2008-12-01T03:40:30.357 回答
1

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

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

如果您尝试获取自己计算机的 MAC 地址,则有更好的方法来解决此问题。

于 2009-04-24T17:04:50.613 回答