NodeJS - 离线时获取MAC地址

时间:2015-06-18 18:56:28

标签: javascript node.js mac-address

this question in C#类似,NodeJS是否可以在断开网络连接时获取计算机的MAC地址?

我一直在使用macaddress模块,当用户连接到网络时,该模块运行良好 - 但如果用户断开连接,macaddress将不会在某些系统上返回任何地址。

我注意到用户离线/在线时os.networkInterfaces()之间存在一些差异,以及Windows / Mac和Node v10 / v12之间的行为差​​异。我不确定问题究竟在哪里。

2 个答案:

答案 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的状态。