【发布时间】:2015-01-21 21:53:37
【问题描述】:
我的平台是 Windows 7(或更高版本),我使用的是 Visual Studio 2010。
在尝试获取唯一的机器标识符时,我试图检索 mac 地址,但遇到了以下问题。
我很难从 GetAdapatersInfo 方法返回的适配器列表中识别哪个是主以太网网络适配器。
我可以通过检查它们的类型来获得一个以太网适配器列表(它应该是 MIB_IF_TYPE_ETHERNET)。
但是,我的机器上有多个以太网适配器:实际的 LAN 适配器、思科创建的软件适配器、蓝牙以太网适配器等。
根据我连接到互联网的方式,此列表会不断变化。
那么,我怎么知道哪一个是实际的以太网适配器(将使用 LAN 电缆连接的那个)。
【问题讨论】:
-
我仍在寻找答案。但是,只是想指出“GetAdaptersAddresses”方法提供了 IP_ADAPTER_ADDRESSES 结构。这个结构有一个字段“FriendlyName”。该字段的值可用于评估它是否为“本地连接”。不确定,这种方法有多可靠。
-
仍在寻找答案,但是,我发现“UuidCreateSequential”使用“Primary”NIC 来生成 UUID。主 NIC 不会根据我连接到 Internet 的方式而改变。完整示例位于以下位置。 codeguru.com/cpp/i-n/network/networkinformation/article.php/…
-
只是想补充一点,如果/当计算机重新启动并且 CISCO VPN 等服务创建/删除虚拟网络适配器时,主 MAC 地址可能会发生变化。仍在努力寻找一种可靠的方法来生成唯一的机器 ID
-
我现在认为MAC地址不是唯一识别机器的非常可靠的方法。
GetAdaptersInfo、GetAdaptersAddresses和UuidCreateSequential可以提供 mac 地址,我尝试了所有三个,但在重新启动和连接配置文件更改后,它们都没有持久性。 -
我现在正在使用 GetVolumeInformation 函数来获取唯一的机器标识符。它返回格式化磁盘时操作系统分配的卷号。为了保持持久性,我总是查询“C:\”驱动器。只要“C:\”驱动器没有改变并且磁盘没有重新格式化,这种方法应该有效;至少这是希望。
标签: ethernet