Nodejs 如何生成服务器的唯一机器码?

发布于 1周前 作者 bupafengyu 来自 nodejs/Nestjs

Nodejs 如何生成服务器的唯一机器码?
null

10 回复

试试获取网卡 mac 地址


把多个硬件的 ID hash 一下就好了, 比如说 CPU 主板 网卡 MAC 等拼成字符串,然后 hash

将就点就 ip 或者直接随机数好了,冲突概率不高。
讲究点就协调一下,zk redis or whatever 协商下防止冲突就好。

请问 nodejs 可以获取 CPU 和主板的 ID 吗 用的哪个模块?

这个问题你要 google 了, 哪怕没有现成的库,widnows 调用 cmd linux 调用 shell 都可以的, 没必要局限于 node

#5
赞!👍,感谢分享

用 mongodb 的 objectid

在Node.js中生成服务器的唯一机器码,通常可以通过结合一些系统信息(如网络接口、CPU信息等)来生成一个唯一的标识符。以下是一个简单的示例,展示如何生成一个基于网络接口MAC地址的唯一机器码。需要注意的是,这种方法在虚拟环境中可能不适用,因为虚拟机的MAC地址可能会改变或重复。

const os = require('os');
const crypto = require('crypto');

function generateMachineId() {
    // 获取所有网络接口
    const interfaces = os.networkInterfaces();
    
    for (const iface in interfaces) {
        for (const ifaceDetail of interfaces[iface]) {
            // 忽略没有MAC地址或内部接口
            if (ifaceDetail.mac && !ifaceDetail.internal) {
                return crypto.createHash('sha256').update(ifaceDetail.mac).digest('hex');
            }
        }
    }
    
    // 如果没有找到合适的网络接口,则生成一个随机ID(不推荐)
    console.warn('No suitable network interface found, generating a random ID');
    return crypto.randomBytes(16).toString('hex');
}

const machineId = generateMachineId();
console.log('Machine ID:', machineId);

这段代码首先尝试获取所有网络接口的信息,并找到一个合适的MAC地址(即非内部接口的MAC地址)。然后,它使用SHA-256哈希算法生成一个唯一的标识符。如果没有找到任何合适的网络接口,它将生成一个随机的标识符(但这通常不推荐,因为它不是基于硬件的唯一标识符)。

请注意,这种方法依赖于网络接口的存在和稳定性,因此在某些环境中可能需要调整或寻找其他唯一标识符的生成方法。

回到顶部