我想知道是否有办法让NODE检索运行它的服务器的MAC地址。
答案 0 :(得分:7)
节点没有内置功能来访问这种低级数据。
但是,您可以执行ifconfig
并解析其输出或为节点编写C ++扩展,该节点提供检索mac地址的函数。更简单的方法是阅读/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'
支票。
答案 1 :(得分:4)
如果您只是寻找唯一的服务器ID,您可以采用mongodb / bson方法并使用服务器主机名的md5哈希的前n个字节:
var machineHash = crypto.createHash('md5').update(os.hostname()).digest('binary');
此代码来自node-buffalo。不完美,但可能会很好,取决于你想要做什么。
答案 2 :(得分:2)
我尝试了getmac包,但它对我不起作用(节点v0.10,Mac OS X) - 所以我开始构建我自己的:https://github.com/scravy/node-macaddress。它适用于Windows,OS X,Linux,可能还有ifconfig
的每个unix: - )
答案 3 :(得分:0)
这是使用命令行工具获取MAC地址的node.js代码:
`$ ifconfig | grep eth0 | awk '{print $5}'`
for 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);
`
答案 4 :(得分:0)
完整答案还很遥远,但是基本上,您可以通过以下方式在vanilla node.js中获取该信息:
require('os').networkInterfaces()
这为您提供了有关系统上网络设备的所有信息,包括每个接口的MAC地址。
您可以进一步缩小到MACS:
JSON.stringify( require('os').networkInterfaces(), null, 2).match(/"mac": ".*?"/g)
进一步,纯MAC地址:
JSON.stringify( require('os').networkInterfaces(), null, 2).match(/"mac": ".*?"/g).toString().match(/\w\w:\w\w:\w\w:\w\w:\w\w:\w\w/g)
最后一个将为您提供以下形式的类似数组的匹配对象:
['00:00:00:00:00:00','A8:AE:B6:58:C5:09','FC:E3:5A:42:80:18']
第一个元素是您的lo或本地接口。
我使用https://www.miniwebtool.com/mac-address-generator/
随机生成了其他示例供公众使用如果您想变得更“合适”(或将其分解为更容易理解的步骤):
var os = require('os');
var macs = ()=>{
return JSON.stringify( os.networkInterfaces(), null, 2)
.match(/"mac": ".*?"/g)
.toString()
.match(/\w\w:\w\w:\w\w:\w\w:\w\w:\w\w/g)
;
}
console.log( macs() );
基本上,您将获取接口数据对象并将其转换为JSON文本字符串。的。您将获得一个用于mac地址的匹配对象,并将其转换为文本字符串。然后,仅将MAC地址提取到可迭代的匹配对象中,该对象仅在每个元素中包含每个MAC。
执行此操作的方法非常简洁,但这是可靠且易于阅读的。