【问题标题】:MAC addresses on a machine / filtering out the MAC addresses of plug and play devices机器上的 MAC 地址/过滤掉即插即用设备的 MAC 地址
【发布时间】:2017-05-04 15:09:58
【问题描述】:

我有以下代码在 Windows 机器上运行并填充最多 3 个 WiFi 和以太网适配器 MAC 地址的字符数组:

IP_ADAPTER_INFO *info = NULL, *pos;
DWORD size = 0;
if (GetAdaptersInfo(info, &size) != ERROR_BUFFER_OVERFLOW)
    return;
info = (IP_ADAPTER_INFO *)malloc(size);
if (GetAdaptersInfo(info, &size) != ERROR_SUCCESS)
    return;
char addresses[1024];
char buffer[1024];
memset(addresses, 0, sizeof(addresses));
memset(buffer, 0, sizeof(buffer));
int recordedAddresses = 0;
for (pos = info; pos != NULL; pos = pos->Next) {
    if (pos->Type != IF_TYPE_IEEE80211 && pos->Type != MIB_IF_TYPE_ETHERNET)
        continue;
    if (recordedAddresses > 0)
        strcat_s<sizeof(addresses)>(addresses, " ");
    for (int i = 0; i < pos->AddressLength; i++) {
        sprintf_s<sizeof(buffer)>(buffer, i == 0 ? "%2.2x" : ":%2.2x", pos->Address[i]);
        strcat_s<sizeof(addresses)>(addresses, buffer);
    }
    recordedAddresses++;
    if (recordedAddresses >= 3)
        break;
}
free(info);
// The array called 'addresses' now contains something like this: a0:b1:c2:d3:e4:f5 0a:1b:2c:3d:4e:5f 00:01:02:03:04:05

如何检测这些IP_ADAPTER_INFO 结构中的任何一个是否涉及即插即用设备?有这样做的标准方法吗?我一直在寻找解决方案。理想情况下,我希望从我的addresses 列表中过滤掉即插即用 WiFi 加密狗,这种类型的加密狗具有 USB 接口并允许您通过 USB 加密狗在 Windows 机器上运行 WiFi 连接(如果可能的话)。

【问题讨论】:

    标签: windows winapi visual-c++ mac-address plug-and-play


    【解决方案1】:

    您需要使用 IP_ADAPTER_ADDRESSES 而不是 IP_ADAPTER_INFO 结构。

    专门查找 PhysicalAddress 并通过地址进行交互。

    【讨论】:

    • 如何过滤掉像这样的即插即用 WiFi 适配器? amazon.com/dp/B01MTLBWXH?psc=1
    • 每个即插即用设备都必须注册为 USB 设备。找到其对应的设备 ID 并与安装的其余 USB 分开。您可以实际使用此设备吗?
    • 你怎么知道什么设备是USB设备?
    • 您可以通过 3 种方式判断哪些设备是 USB。 SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53f56307-b6bf-11d0-94f2-00a0c91efb8b} 键:DEVINTERFACE_DISK SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53F5630D-B6BF-11D0-94F2-00A0C91EFB8B}\ \Control 键:DEVINTERFACE_VOLUME SYSTEM\\MountedDevices\\DosDev\ 键:USBSTOR 您将需要专门检查此字符串以与列表中的固定设备分开。这是最明显的。如果您从当前函数中获取您的 mac 地址,您可以匹配 USB 设备的 ClassID。 \\??\\STORAGE#RemovableMedia#
    • 每次注册 PNP 设备时,都会将其放入这些密钥中。
    猜你喜欢
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多