2013-05-05 4 views
5

Ich arbeite an this question.Holen Sie sich die MAC-Adresse der aktuellen Maschine mit node.js mit getmac

Jetzt versuche ich getmac

zu verwenden, um die MAC-Adresse der aktuellen Maschine zu bekommen mit node.js.

Ich folgte den Installationsanweisungen. Aber wenn ich diesen Code ausführen:

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

ich diesen Fehler:

Fehler: Befehl fehlgeschlagen: der Befehl „getmac“ nicht gefunden

werden konnte

Wissen Sie, wie diese zu erhalten, Arbeit?

+0

Er ... welche Plattform und wie läuft es? –

+0

Haben Sie das Modul installiert? 'npm installieren getmac'? – drinchev

+0

@JoachimIsaksson Knoten Version 0.8.16 –

Antwort

-1

Sie müssen es mit Root-Benutzer oder Befehl ausführen.

+0

Sie haben kein Beispiel, Skript oder genauer Vorschlag und * führen Sie es als root * isn ist nicht unbedingt notwendig, um die MAC-Adresse eines Computers zu erhalten. – ArchNoob

3

Ein Node.JS-Skript kann die MAC-Adresse des aktuellen Computers ermitteln, indem es die verbindungslokale IPv6-Adresse überprüft. (Einschränkung: Dies erfordert, dass der IPv6-Stapel innerhalb des O/S aktiv ist, was zunehmend üblich ist)

z.B.

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

Basierend auf http://en.wikipedia.org/wiki/IPv6_address#Modified_EUI-64

  1. die 0xfffe aus dem mittleren Bit # 41
  2. bitweise invertieren entfernen XOR 0x020000000000

Unter Windows ist es notwendig, randomizeidentifiers zu deaktivieren, indem Sie die Lauf erhöhter Befehl:

netsh interface ipv6 set global randomizeidentifiers=disabled 

Der folgende Code diese Technik verwendet eine Variante 1 UUID (tail Generation passiert nur einmal) zu erzeugen:

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('-'); 
}; 
9

On NodeJS ≥ 0,11 die MAC-Adresse für jede Netzwerkschnittstelle ist in der Ausgabe von os.networkInterfaces(), z.B.

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 müssen Sie die MAC-Adressen auf eigene Faust, um herauszufinden, aber es gibt Pakete, die Sie dabei helfen: node-macaddress (Disclaimer: Ich bin der Autor des Pakets).

Dieses Paket auch eine Schnittstelle für Ihren Host wählt, so dass Sie

nur tun können,
require('node-macaddress').one(function (err, addr) { console.log(addr); } 

auf Knoten ≥ 0,11 Sie nicht erforderlich sind, um die asynchrone Version zu verwenden:

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

Da Sie In der Regel nur interessiert an "die Hosts Macaddress" (obwohl es nicht so etwas wie ein Host kann mehrere Netzwerkschnittstellen mit jeweils einer individuellen Mac-Adresse haben), wird dieser Aufruf genau das geben.

+0

Dies funktioniert nicht mehr nach 8.0.0. derzeit 8.1.3 gibt immer noch Nullen für den Mac im Gerät zurück (nicht lokal). Es muss gepatcht werden, bis sie ihren 8.0.0-Code wieder in Ordnung bringen ?! IP addr wird einen Link/Ether geben, aber etwas anderes wäre besser. –

2

Sie müssen getmac installieren node_module mit npm getmac in Eingabeaufforderung/Terminal installieren. Dann wird es funktionieren.

+0

Ja, das funktioniert für mich, Danke @Pavani –