10 回复
试试获取网卡 mac 地址
把多个硬件的 ID hash 一下就好了, 比如说 CPU 主板 网卡 MAC 等拼成字符串,然后 hash
将就点就 ip 或者直接随机数好了,冲突概率不高。
讲究点就协调一下,zk redis or whatever 协商下防止冲突就好。
请问 nodejs 可以获取 CPU 和主板的 ID 吗 用的哪个模块?
这个问题你要 google 了, 哪怕没有现成的库,widnows 调用 cmd linux 调用 shell 都可以的, 没必要局限于 node
#5
赞!👍,感谢分享
用 mongodb 的 objectid
uuid?
在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哈希算法生成一个唯一的标识符。如果没有找到任何合适的网络接口,它将生成一个随机的标识符(但这通常不推荐,因为它不是基于硬件的唯一标识符)。
请注意,这种方法依赖于网络接口的存在和稳定性,因此在某些环境中可能需要调整或寻找其他唯一标识符的生成方法。