C++ 从uuid中提取MAC地址

C++ 从uuid中提取MAC地址,c++,windows,uuid,C++,Windows,Uuid,我使用的程序假设由Windows RPC API调用UuidCreateSequential()生成的UUID包含主以太网适配器的MAC地址。这个假设正确吗?或者我应该使用不同的方法来获取MAC地址吗?这似乎是一个有效的假设。上的文档特别指出,这将包含机器上以太网卡的地址。它没有提到任何关于多卡场景的内容,但选择主卡似乎是一个合乎逻辑的飞跃 我不相信这一点-UuidCreateSequential拥有MAC地址的唯一原因是它试图保证UUID在整个网络中是唯一的。另外,你为什么要用这种奇怪的方式来

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

这似乎是一个有效的假设。上的文档特别指出,这将包含机器上以太网卡的地址。它没有提到任何关于多卡场景的内容,但选择主卡似乎是一个合乎逻辑的飞跃

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

如果您正在编写托管代码,我将使用该类并调用
GetAllNetworkInterfaces()
。或者从C++代码调用,这是托管实现使用的。
即使
UuidCreateSequential
确实可以做到这一点,但这是一种非常模糊的获取信息的方式,并且隐藏了潜在的问题,例如计算机有多个适配器。

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

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


如果您试图获取自己计算机的MAC地址,有更好的方法。

???。文档中说该函数是专门为获取MAC地址而创建的。JaredPar:不,文档中说该函数是为使用MAC地址而创建的。文档所说的是,返回的UUID对于该MAC地址是唯一的,这并不意味着MAC地址可以从UUID中恢复。是的-前两个MAC位在生成GUID时没有用处。再一次,-1表示完全有效的答案。至少要有勇气在评论部分给出理由GetAdapterInfo调用现在已经被弃用,应该改为使用