如何获取计算机的ID?

3
有没有VB.NET或Java的代码可以获取计算机ID? 我想编写一个程序,以获取计算机的ID,以便制作像Microsoft一样的软件许可证。谢谢!

2
计算机的ID是什么意思? - Alxandr
可能是基于Java的唯一计算机ID硬件的重复问题。 - Stephen C
1
我认为他的意思是使用WMI读取主板序列号-请参见上面链接的SO问题。 - Stephen C
我的意思是在一台计算机上应该有类似ID的东西来进行识别。 - Makara
2个回答

7
首先,Microsoft的许可证不是这样工作的。他们有一个在他们那边生成的密钥。当他们向你出售软件副本时,他们会给你一个密钥。一旦你输入了密钥,软件就会发送一些加密的TCP数据包回到微软,以便识别密钥现在正在使用并增加使用计数。它还会在你的系统上创建一个很好隐藏的文件,其中包含该密钥的授权信息。
所有这些都与获取“计算机ID”无关。
现在,根据至少一个许可模型,微软会拍摄包括处理器类型、硬盘和主板制造/型号在内的系统快照,以确定组件是否发生了足够的更改,从而触发重新验证计算机许可证的潜在检查。
这使得我们又回到了一个想法:计算机系统中没有单一的“ID”。最后一次尝试这样做的是英特尔公司(我相信是)他们的PII处理器。然而,公众的强烈反对足以让他们停止在芯片上放置序列号。
你可以做的下一个最接近的事情是尝试读取MAC地址;但网络卡经常更换,这充满了陷阱。
我强烈建议你研究其他机制来生成许可证密钥,如果这确实是你想要的。

2
您可以使用此功能,它将返回MAC地址:
public String macname() throws IOException {
    String mac = "null";
    String[] getmac = new String[] { "cmd", "/c", "getmac /NH" };
    Process pnew = Runtime.getRuntime().exec(getmac);
    BufferedReader newin = new BufferedReader(new InputStreamReader(
            pnew.getInputStream()));
    String line1 = "";
    String ab = "";

    while ((line1 = newin.readLine()) != null) {
        ab = ab + line1;
    }
    int in = ab.indexOf(' ');
    mac = ab.substring(0, in);
    return mac;
}

1
计算机当然没有MAC ID。网络适配器有,但计算机可以拥有多个网络接口卡。 - Cody Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接