我需要生成一个唯一的字符串,以便在每台机器上都不同 - "设备指纹"。
有哪些可能的自定义实现方法?(我有一些想法,但我认为你们可能有更好的想法)
现有的解决方案有哪些?(商业和非商业均可接受)
有哪些可能的自定义实现方法?(我有一些想法,但我认为你们可能有更好的想法)
现有的解决方案有哪些?(商业和非商业均可接受)
您可以使用WMI获取网卡MAC地址、硬盘序列号(不是卷序列号)、CPU ID和BIOS ID。这种方法的缺点是,在某些机器上由于几个原因,其中一些信息可能无法获得,但您可以从这4个来源中组合信息,至少会有一个可用,但在某些机器上,WMI并不能按预期工作,您必须拥有某种备用方案,例如卷序列号,以确保在所有机器上都能正常工作。
另一个问题是,您必须拥有管理员权限才能通过WMI获取此信息,我通过使用Windows服务解决了该问题,并将信息发送到应用程序。
以下是一些有趣的WMI查询:
硬盘序列号:
SELECT SerialNumber FROM Win32_PhysicalMedia where SerialNumber <> null
BIOS序列号:
SELECT SerialNumber FROM Win32_BIOS where SerialNumber <> null
CPU 序列号:
SELECT ProcessorID FROM Win32_Processor
NIC MAC:
SELECT MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True
顺便说一下,你可以使用Paessler WMI Tester测试WMI。
我通常在应用程序中所做的是通过从环境
中找到的机器名称的哈希来创建一个特殊的ID,将其与我的应用程序名称的哈希值连接起来,然后应用盐(可能甚至不必要,但这有助于产生对于应用程序/机器组合的“指纹”)。
这在我的情况下有效,因为一次只有一台机器上有我的应用程序副本。
你想要的一些内容可能取决于你对相关系统的可见性。例如,你可能有个人和/或网络防火墙以及VLAN,这些都会阻止你对设备本身进行询问。我发现针对网络基础设施中的设备进行SNMP查询(用于获取MAC地址信息的交换机和用于获取IP地址的路由器)可以快速获得良好的图像。否则,NMAP是你的好朋友。