Получить MAC-адрес текущего компьютера с помощью node.js с помощью getmac

Я работаю над этим вопросом.

Теперь я пытаюсь использовать getmac

для получения MAC-адреса текущего компьютера с node.js.

Я выполнил инструкции по установке. Но когда я запускаю этот код:

require('getmac').getMac(function(err,macAddress){
    if (err)  throw err;
    console.log(macAddress);    
});

Я получаю эту ошибку:

Ошибка: команда не выполнена: команда "getmac" не найдена

Вы знаете, как заставить это работать?

+8
05 мая '13 в 15:58
источник поделиться
4 ответа

В NodeJS ≥ 0.11 адрес MAC для каждого сетевого интерфейса находится на выходе os.networkInterfaces(), например.

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 } ] }

В NodeJS ≤ 0,10 вам нужно узнать собственные адреса mac, но есть пакеты, которые помогут вам в этом: node-macaddress (отказ от ответственности: я я автор этого пакета).

Этот пакет также выбирает один интерфейс для вашего хоста, чтобы вы могли сделать только

require('node-macaddress').one(function (err, addr) { console.log(addr); }

В режиме node ≥ 0.11 вам не требуется использовать асинхронную версию:

var addr = require('node-macaddress').one();

Поскольку вас обычно интересует только "macaddress хостов" (хотя нет такой вещи, как хост может иметь несколько сетевых интерфейсов, каждый из которых имеет отдельный MAC-адрес), этот вызов даст вам именно это.

+11
03 апр. '15 в 22:52
источник

A Node.JS script может обнаружить MAC-адрес текущего компьютера, изучив локальный адрес IPv6. (caveat: для этого требуется, чтобы стек IPv6 был активным в пределах O/S, что становится все более распространенным)

например.

LL: fe80::0211:22ff:fe33:4455
MAC:      0011:22     33:4455

На основе http://en.wikipedia.org/wiki/IPv6_address#Modified_EUI-64

  • удалите 0xfffe из середины.
  • побитовый инвертированный бит # 41 с использованием XOR 0x020000000000

В Windows необходимо деактивировать randomizeidentifiers, выполнив команду повышенного уровня:

netsh interface ipv6 set global randomizeidentifiers=disabled

Следующий код использует эту технику для генерации UUID Variant 1 (генерация хвоста происходит только один раз):

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('-');
};
+4
22 апр. '14 в 13:32
источник

Вам нужно установить getmac node_module, используя npm install getmac в командной строке/терминале. Тогда это сработает.

+2
07 июл. '16 в 11:29
источник

Вы должны запустить его с помощью пользователя root или команды.

-1
31 окт. '13 в 10:28
источник

Посмотрите другие вопросы по меткам или Задайте вопрос