与this question in C#类似,NodeJS可能在从网络断开连接时获取计算机的MAC地址吗?NodeJS - 脱机时获取MAC地址
我一直在使用macaddress模块,该模块在用户连接到网络时效果很好 - 但如果用户断开连接,macaddress
将不会在某些系统上返回任何地址。
我注意到os.networkInterfaces()
当用户离线/在线,以及跨Windows/Mac和Node v10/v12的行为差异之间的一些差异。我不确定问题实际上在哪里。
与this question in C#类似,NodeJS可能在从网络断开连接时获取计算机的MAC地址吗?NodeJS - 脱机时获取MAC地址
我一直在使用macaddress模块,该模块在用户连接到网络时效果很好 - 但如果用户断开连接,macaddress
将不会在某些系统上返回任何地址。
我注意到os.networkInterfaces()
当用户离线/在线,以及跨Windows/Mac和Node v10/v12的行为差异之间的一些差异。我不确定问题实际上在哪里。
我刚刚使用getmac模块进行了测试,并且可以在离线(和在线)下正常工作。
,您可以尝试这样的:
require('getmac').getMac(function(err,macAddress){
if (err) throw err
console.log(macAddress) // 77:31:c2:c5:03:10
})
如果你不想使用一个模块,您还可以要求每个MAC地址的接口是这样的(节点> = 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 } ] }
目前面临着同样的情况。基于知道我们已知的接口的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
的状态。
我竖起大拇指,但我建议不要在实际代码中将IP地址放在字符串常量中,甚至不是一个例子。有些新手可能会认为在实际操作中可以这么做。 – FauChristian
是的,在其他上下文中,将其保留为按位比较的32位数字可能是有用的,但在此特定情况下,检查位于来自os.networkInterfaces();的字符串之间。 –
我也尝试过使用'getmac',但它在Windows上抛出错误 - 所以这并没有给我太多信心。 – arthurakay
如何使用'require('os')。networkInterfaces()'? – Gepser
我的windows机器在离线时(仅在“Loopback Pseudo-Interface 1”下)报告MAC'00:00:00:00:00:00'。因此,当在线时匹配这些地址时,显然不是该机器的唯一MAC地址 - 并且在脱机时不报告其他网络接口。 – arthurakay