我可以使用node.js获取唯一的服务器机器标识符吗?

我想知道是否有方法让NODE检索它正在运行的服务器的MAC地址。

节点没有内置的是访问这种低级别的数据。

但是,您可以执行ifconfig并parsing其输出,或为节点提供一个C ++扩展,以提供检索MAC地址的function。 更简单的方法是读/sys/class/net/eth?/address

 var fs = require('fs'), path = require('path'); function getMACAddresses() { var macs = {} var devs = fs.readdirSync('/sys/class/net/'); devs.forEach(function(dev) { var fn = path.join('/sys/class/net', dev, 'address'); if(dev.substr(0, 3) == 'eth' && fs.existsSync(fn)) { macs[dev] = fs.readFileSync(fn).toString().trim(); } }); return macs; } console.log(getMACAddresses()); 

该函数返回一个包含所有eth*设备的mac地址的对象。 如果你想要所有的设备有一个,即使他们是例如称为wlan* ,只需删除dev.substr(0, 3) == 'eth'检查。

如果你只是寻找一个唯一的服务器ID,你可以采用mongodb / bson方法,并使用服务器主机名的md5散列的前n个字节:

 var machineHash = crypto.createHash('md5').update(os.hostname()).digest('binary'); 

这段代码来自node-buffalo 。 不完美,但可能会足够好取决于你想要做什么。

我尝试了getmac软件包,但它不适用于我(节点v0.10,Mac OS X) – 所以我开始build立自己的: https : //github.com/scravy/node-macaddress 。 它适用于Windows,OS X,Linux,并可能每个与ifconfig unix 🙂

这里是使用命令行工具获取MAC地址的node.js代码:

 `$ ifconfig | grep eth0 | awk '{print $5}'` 

为wlan0

 `$ ifconfig | grep wlan0 | awk '{print $5}'` 

在node.js中,使用这个 – 保存代码到getMAC.js – “$ node getMAC.js”来运行

 `// Get MAC address - $ ifconfig | grep wlan0 | awk '{print $5}' var exec = require('child_process').exec; function puts(error, stdout, stderr) { console.log(stdout) } exec("ifconfig | grep wlan0 | awk '{print $5}'", puts); `