I am working on this question.
Now I am trying to use getmac
to get the mac address of the current machine with node.js.
I followed the installation instructions. But when I run this code:
require('getmac').getMac(function(err,macAddress){ if (err) throw err; console.log(macAddress); }); I get this error:
Error: Command failed: the command "getmac" could not be found
Do you know how to get this to work?
85 Answers
On NodeJS ≥ 0.11 the mac address for each network interface is in the output of os.networkInterfaces(), e.g.
require('os').networkInterfaces() { eth0: [ { address: 'fe80::cae0:ebff:fe14:1dab', netmask: 'ffff:ffff:ffff:ffff::', family: 'IPv6', mac: 'c8:e0:eb:14:1d:ab', scopeid: 4, internal: false }, { address: '192.168.178.22', netmask: '255.255.255.0', family: 'IPv4', mac: 'c8:e0:eb:14:1d:ab', internal: false } ] } In NodeJS ≤ 0.10 you need to find out the mac addresses on your own, but there are packages to help you with that: node-macaddress (disclaimer: I am the author of said package).
This package also selects one interface for your host so that you can do just
require('node-macaddress').one(function (err, addr) { console.log(addr); } On node ≥ 0.11 you are not required to use the asynchronous version:
var addr = require('node-macaddress').one(); Since you are typically only interested in "the hosts macaddress" (although there is no such thing as a host can have multiple network interfaces each having an individual mac address), this call will give you exactly that.
3A Node.JS script can discover the MAC address of the current machine by examining the link-local IPv6 address. (caveat: this requires the IPv6 stack to be active within the O/S, which is increasingly common)
e.g.
LL: fe80::0211:22ff:fe33:4455 MAC: 0011:22 33:4455 - remove the 0xfffe from the middle
- bitwise invert bit#41 using XOR 0x020000000000
On Windows it is necessary to deactivate randomizeidentifiers by running the elevated command:
netsh interface ipv6 set global randomizeidentifiers=disabled The following code uses this technique to generate a Variant 1 UUID (tail generation happens just once):
function generateUUID() { generateUUID.tail = generateUUID.tail || (function(nics) { var nic, index, addr, retn; for (nic in nics) { // try to obtain the MAC address from the IPv6 scope-local address for (index in nics[nic]) { addr = nics[nic][index]; if (!addr.internal) { if (addr.address.indexOf('fe80::') === 0) { // found scope-local retn = retn || addr.address.slice(6).split(/:/).map(function(v, i, a) { return parseInt(v, 16); }); } } } } if (!retn) { // no IPv6 so generate random MAC with multicast bit set index = Math.pow(2, 16); retn = []; retn.push(Math.floor(Math.random() * index) | 0x1000); // set multicast bit retn.push(Math.floor(Math.random() * index)); retn.push(Math.floor(Math.random() * index)); retn.push(Math.floor(Math.random() * index)); } retn[3] = 0x10000 | retn[3]; retn[2] = 0x10000 | retn[1] & 0xff00 | retn[2] & 0x00ff; // eliminate FFFE from xxxx:xxFF:FExx:xxxx retn[1] = 0x10000 | retn[0] ^ 0x0200; // invert bit#41 retn[0] = 0x18000 | process.pid & 0x3fff; retn = retn.map(function(v, i, a) { return v.toString(16).slice(1) }); return retn[0] + '-' + retn[1] + retn[2] + retn[3]; })(require('os').networkInterfaces()); var head = process.hrtime(), now = Math.floor(Date.now() / 1000); head[1] = Math.floor(head[1] * 0.268435456); // 2^28 / 10^9 head[2] = (0x11000 | head[1] & 0x0fff).toString(16).slice(1); head[1] = (0x10000 | head[1] >>> 12 & 0xffff).toString(16).slice(1); head[0] = (4294967296 + now).toString(16).slice(1); return head.concat(generateUUID.tail).join('-'); }; You need to install getmac node_module using npm install getmac in command prompt/terminal. Then, it will work.
0install the package getmac using the terminal.
npm install --save getmac using in node
const getmac = require('getmac') const callMac = () =>{ return getmac.default() } output >> "00:05:1b:61:d3:05"
You must run it with root user or command.
1