与this question in C#类似,NodeJS是否可以在断开网络连接时获取计算机的MAC地址?
我一直在使用macaddress模块,当用户连接到网络时,该模块运行良好 - 但如果用户断开连接,macaddress
将不会在某些系统上返回任何地址。
我注意到用户离线/在线时os.networkInterfaces()
之间存在一些差异,以及Windows / Mac和Node v10 / v12之间的行为差异。我不确定问题究竟在哪里。
答案 0 :(得分:3)
我刚刚使用getmac模块进行了测试,离线(和在线)工作正常。
你可以这样试试:
require('getmac').getMac(function(err,macAddress){
if (err) throw err
console.log(macAddress) // 77:31:c2:c5:03:10
})
如果您不想使用模块,您也可以像这样请求每个mac地址接口(node> = 0.11):
require('os').networkInterfaces()
然后根据您的需要解析它。
结果应如下所示:
{ lo0:
[ { address: '::1',
netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 0,
internal: true },
{ address: '127.0.0.1',
netmask: '255.0.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: true },
{ address: 'fe80::1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 1,
internal: true } ],
en0:
[ { address: '10.3.162.15',
netmask: '255.255.254.0',
family: 'IPv4',
mac: '77:31:c2:c5:03:10',
internal: false } ],
vboxnet0:
[ { address: '192.168.33.1',
netmask: '255.255.255.0',
family: 'IPv4',
mac: '0a:00:27:00:00:00',
internal: false } ],
en3:
[ { address: '10.3.32.45',
netmask: '255.255.248.0',
family: 'IPv4',
mac: '0c:4d:e7:3d:3d:17',
internal: false } ] }
答案 1 :(得分:2)
目前面临同样的情况。基于知道我们已经知道的接口的IP地址,我最终获得了以下代码。
var os = require('os');
var getNetworkDataForThisIP = function(ipOfTheInterfaceWanted) {
var networkInterfaces = os.networkInterfaces();
var selectedInterfaceData;
Object.keys(networkInterfaces).forEach((NetworkID, index, obj) => {
networkInterfaces[NetworkID].forEach((data) => {
if (data.family == "IPv4" && ipOfTheInterfaceWanted== data.address) {
//I created new Object because the NetworkID is not provided in the 'data' object
selectedInterfaceData = {
network: NetworkID,
address: data.address,
netmask: data.netmask,
family: data.family,
mac: data.mac,
};
}
});
});
return selectedInterfaceData;
}
var data = getNetworkDataForThisIP("192.168.5.1")
console.log(data.network);
console.log(data.address);
console.log(data.netmask);
console.log(data.family);
console.log(data.mac);
您可以根据您已知的内容进行修改以符合您的需求。
实际上没有回答离线问题,但您可以查看!!data
的状态。