我需要生成一个不同机器的唯一字符串 - 一个“设备指纹”。
什么是......
答案 0 :(得分:1)
我对我的应用程序执行的操作通常是通过从Environment
中找到的计算机名称获取哈希值来创建一个特殊ID,使用我的应用程序名称的哈希值连接它,然后应用一个盐(可能甚至没有必要,但它有助于偏执)为app / machine组合产生“指纹”。
这适用于我的情况,因为我的应用程序一次只有一个副本。
答案 1 :(得分:1)
现在大多数机器都有一个带有MAC地址的网卡(如果它没有连接到网络,那么你需要为该机器提供一个唯一的ID?)。只需确保获取物理网卡的MAC地址,而不是虚拟mac(由VMWare或Virtualbox创建)。您可能希望存储MAC来自的设备的名称,以便在枚举MAC地址时始终获得相同的MAC地址。也不要使用它来保证安全,因为它总是可以伪造一个MAC地址,它只是提供一个相对唯一的标识符。
答案 2 :(得分:1)
设备指纹识别是一个复杂的主题,如果你想要涵盖许多边缘情况(例如硬件升级,操作系统升级等),并且如果你担心人们消耗能量来伪造一个已知良好的设备指纹(良好的意义)指纹是您所知道的,并获得一些好处,如软件使用权),或创建一个您不知道的全新指纹(例如,指纹在某种黑名单中,并且用户想要创建新设备不在黑名单中的设备的ID。)
有些东西是相当静态的,是简单指纹的合理基础。 MAC地址最适合该类别,但也很容易更改。此外,一些计算机有几个MAC地址(包括来自虚拟机的MAC),因此您需要处理这种复杂性。一些网络设备是短暂的,例如,系绳手机。
计算机的其他方面更难(但绝不是不可能)伪造,例如CPU信息,BIOS校验和,硬盘序列号等。然而,那些往往难以伪造的东西也更多可能会改变(BIOS升级,新硬盘,可移动硬盘等)。
您还需要考虑仔细保护实际生成指纹的代码。如果该代码很容易(足够)进行破解,那么试图击败您的解决方案的人只需将他们想要的任何指纹直接插入到收集和评估组件的代码中。
答案 3 :(得分:0)
您想要的一些内容可能取决于您对相关系统的可见性。例如,您可能拥有个人和/或网络防火墙和VLAN,阻止您查询设备本身。我发现针对网络基础设施中的设备的SNMP查询(用于MAC地址信息的交换机以及用于IP地址的路由器)可以提供良好的快速图像。否则,NMAP就是你的朋友。
答案 4 :(得分:0)
您可以使用WMI并获取NIC MAC地址,HDD串行(非卷串行),CPU ID和BIOS ID。这种方法的缺点是,在某些机器上,由于多种原因,某些信息不可用,但是您可以组合来自该4源的信息,并且至少有一个将存在,但某些机器上的WMI根本无法正常工作,你必须有某种后备,这可以在所有机器上运行,例如。卷序列号。
另一个问题是你必须拥有管理员权限才能通过WMI获取此信息,我解决了使用WMI并向应用程序发送信息的Windows服务的问题。
以下是一些有趣的WMI查询:
硬盘系列:
SELECT SerialNumber FROM Win32_PhysicalMedia where SerialNumber <> null
BIOS序列号:
SELECT SerialNumber FROM Win32_BIOS where SerialNumber <> null
CPU serial:
SELECT ProcessorID FROM Win32_Processor
NIC MAC:
SELECT MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True
顺便说一句。您可以使用Paessler WMI Tester
测试WMI答案 5 :(得分:0)