识别计算机的唯一地址,真的有什么方法可以唯一地识别任何计算机吗?

问题是,某些已接受的答案已建议将MAC地址作为唯一的标识符,这是完全不正确的。其他一些答案建议使用似乎更合乎逻辑的各种组件的组合。但是,在使用组合的情况下,应考虑哪个组件自然不可能经常更改。几天前,我们为软件许可问题开发了一个密钥生成器,其中我们使用CPUID和MAC的组合来唯一地标识Windows pc,直到实际测试,我们认为我们的方法足够好。具有讽刺意味的是,当我们进行测试时,我们发现三台计算机使用我们的密钥生成器返回了相同的ID!

那么,真的有什么方法可以唯一地识别任何一台计算机吗?现在,我们只需要使我们的密钥生成器在Windows pc上运行即可。由于我们的系统是在.net上开发的,因此使用c#的某种方式(如果可能的话)会很棒。

更新:

很抱歉造成一些混乱和明显的错误警报。我们在检索硬件信息的方法中发现了一些错误。最初,我想删除此问题,因为现在我自己的困惑已经消失,并且我确实相信两个或多个组件的组合足以识别计算机。但是,后来我决定保留它,因为我认为我应该弄清楚是什么引起了该问题,因为将来同样的事情可能会伤害其他人。

这是我们正在做的(不包括其他代码):

我们正在使用一个getManagementInfo函数来检索MAC和处理器ID

private String getManagementInfo(String StrKey_String, String strIndex)

{

String strHwInfo = null;

try

{

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + StrKey_String);

foreach (ManagementObject share in searcher.Get())

{

strHwInfo += share[strIndex];

}

}

catch (Exception ex)

{

// show some error message

}

return strHwInfo;

}

然后在需要的地方使用该函数检索MAC地址

string strMAC = getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress");

并检索ProcessorID

string strProcessorId = getManagementInfo("Win32_Processor", "ProcessorId");

此时,strMAC如果存在多个MAC地址,则将包含多个MAC地址。我们只取了一个17个字符(12个MAC数字和5个冒号)。

strMAC = strMAC.Length > 17 ? strMAC.Remove(17) : strMAC;

这是我们犯错的地方。因为getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回的是一些确实在使用的额外MAC地址。例如,当我们在命令提示符下逐个getmac命令搜索MAC地址时,它会为每台PC显示一个或两个不同的MAC地址。但是getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回了四到五个MAC地址,其中一些地址对于所有计算机都是相同的。由于我们只是获取了函数返回的第一个MAC地址,而不是检查其他任何内容,因此strMAC偶然获取了相同的MAC地址。

但是,对于相同的处理器ID问题,我绝对正确。当我们wmic cpu get ProcessorId在命令提示符下输入命令时,这三个命令都返回了相同的处理器ID 。

现在我们决定使用主板序列号而不是处理器ID来与MAC地址结合使用。我认为可以通过这种方式达到我们的目的,如果在某些情况下不这样做,那么在少数情况下我们应该放手。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值