Nodejs获取服务器硬件信息

需求

用nodejs获取服务器硬件信息(MAC地址、IP地址、CPU序列号、主板序列号),生成一串唯一License

代码

要使用Node.js获取服务器的硬件信息,你可以使用一些第三方模块来帮助你收集所需的信息。以下是使用一些常见的模块获取硬件信息并生成唯一许可证的示例代码:

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

// 获取MAC地址
function getMacAddress() {
  return new Promise((resolve, reject) => {
    macaddress.one((err, mac) => {
      if (err) {
        reject(err);
      } else {
        resolve(mac);
      }
    });
  });
}

// 获取IP地址
function getIpAddress() {
  const ifaces = os.networkInterfaces();
  for (const iface in ifaces) {
    const addresses = ifaces[iface];
    for (const addr of addresses) {
      if (addr.family === 'IPv4' && !addr.internal) {
        return addr.address;
      }
    }
  }
  return 'Unknown';
}

// 获取CPU序列号
function getCpuSerial() {
  const cpus = os.cpus();
  const serials = [];
  for (const cpu of cpus) {
    if (cpu.hasOwnProperty('serialNumber')) {
      serials.push(cpu.serialNumber);
    }
  }
  return serials.join(',');
}

// 获取主板序列号
function getMotherboardSerial() {
  return os.platform() === 'win32' ? os.userInfo().username : os.hostname();
}

// 生成唯一License
function generateLicense() {
  const macPromise = getMacAddress();
  const ip = getIpAddress();
  const cpuSerial = getCpuSerial();
  const motherboardSerial = getMotherboardSerial();

  return Promise.all([macPromise])
    .then(([mac]) => {
      const data = `${mac}${ip}${cpuSerial}${motherboardSerial}`;
      const hash = crypto.createHash('md5').update(data).digest('hex');
      return hash;
    });
}

// 测试生成License
generateLicense()
  .then(license => {
    console.log('License:', license);
  })
  .catch(err => {
    console.error('Error:', err);
  });

上述代码使用了以下三个第三方模块:

  1. macaddress:用于获取MAC地址。你可以使用npm install macaddress命令安装该模块。
  2. crypto:Node.js内置的加密模块,用于生成哈希值。

确保你已经通过npm install命令安装了这两个模块。

请注意,这些硬件信息可能因操作系统和硬件设备而异。在某些情况下,获取主板序列号可能不太容易。在Windows平台上,我在示例中使用了当前用户的用户名作为主板序列号的替代值,但这并不是一个唯一标识。你可能需要根据具体的需求对代码进行调整。

此外,请注意生成的License只是根据硬件信息生成的哈希值,它并不包含任何验证机制。在实际应用中,你可能需要进一步对License进行加密、签名或其他验证步骤,以确保其唯一性和安全性。

评论