因此,我刚刚使用一个应用程序扫描网络上的 PC,作为局域网唤醒的快捷方式。三台 PC 中的两台显示了完整的信息。照片中所示的那台,除了主机名外,其他信息都是错误的。
我进入设备管理器并禁用了虚拟机适配器,然后将其传递给另一个虚拟机适配器。只有禁用它们两个后,它才能真正获取正确的接口和相关信息。这显然不是一个解决方案,我想了解为什么会发生这种情况以及如何解决它。
我执行了 Get-NetIPInterface,结果显示指标高于我的以太网适配器。为了安全起见,我进一步提高了指标,但没有任何变化,因此显然这不是问题的根源。如果有人能提供建议,我将不胜感激。正如您在应用程序中看到的,您可以指定要扫描的 IP 范围,而它为问题 PC 拾取的 IP 甚至不在该范围内。它应该拾取的 IP 是 192.168.1.1,因此显然它在某种程度上看到了它。
该应用程序是 aquilatech Wake On LANhttps://github.com/basildane/WakeOnLAN
编辑-我收到了一些信息,指出这是代码库的问题,据我所知。
所以……查看代码后,我认为 Search.vb 中的 GetWmIdata (GetWMIdata) 函数存在逻辑缺陷(如果我没有误解代码的话——我最后一次使用 Visual Basic 是在大约 20 年前,最后一次使用 CIM/WMI 是在很多年前,所以我的分析要慎之又慎)。连接到远程主机后,它会获取计算机名称和操作系统名称,然后循环遍历主机上每个启用 IP 的 NIC。对于主机中的每个 NIC,它:
选择分配给 NIC 的最后一个 IP 地址并将其用作“ipaddress”;
从 NIC 中提取描述并将其用作“netinterface”;
从 NIC 中提取 MAC 地址并将其用作“macaddress”;
检查 NIC 的电源管理功能、唤醒功能和 WoL 功能。当存在多个 NIC 时,它似乎会继续循环,直到枚举完所有 NIC,但在每种情况下,它都会用最新发现的 NIC 的属性覆盖任何先前发现的属性(电源管理和唤醒功能除外……如果任何 NIC 具有这些功能,则这些属性最终会设置为 true)。我没有看到任何代码可以实际验证它是否选择了连接到执行探测的接口的 NIC 的属性……或者甚至验证该接口是否可以从执行探测的网络访问。它只是遍历系统中的 NIC 列表,最终使用它找到的最后一个 NIC 的属性,无论它是哪个。
我认为函数 GetWMIdata 需要评估从扫描主机到该接口的可达性,并在选择返回哪个 NIC 的属性时考虑到这一点。
希望这有用(并且不是完全误导或错误的......)。