2012-06-23 4 views
9

Ich würde gerne wissen, ob es eine Möglichkeit gibt, dass NODE die MAC-Adresse (n) des Servers, auf dem es läuft, abruft.Kann ich eine eindeutige Server-Maschinen-ID mit node.js abrufen?

+0

See [diese Antwort] laufen (htt p: //stackoverflow.com/questions/16386371/get-the-mac-address-of-the-current-machine-with-node-js-using-getmac) für einen anderen Vorschlag. – user3560651

+0

Dieses Paket ist plattformübergreifend und wird auf Knoten 0.10-0.12 sowie auf io.js getestet: https://github.com/scravy/node-macaddress - siehe 'one()' Methode. – scravy

+0

Versuchen Sie diesen: https://www.npmjs.com/package/ee-machine-id – camposer

Antwort

6

Knoten hat keine eingebaute war auf diese Art von Low-Level-Daten zuzugreifen.

Sie könnten jedoch ifconfig ausführen und seine Ausgabe analysieren oder eine C++ - Erweiterung für Knoten schreiben, die eine Funktion zum Abrufen der MAC-Adresse bereitstellt. Eine noch einfachere Art und Weise liest /sys/class/net/eth?/address:

var fs = require('fs'), 
    path = require('path'); 
function getMACAddresses() { 
    var macs = {} 
    var devs = fs.readdirSync('/sys/class/net/'); 
    devs.forEach(function(dev) { 
     var fn = path.join('/sys/class/net', dev, 'address'); 
     if(dev.substr(0, 3) == 'eth' && fs.existsSync(fn)) { 
      macs[dev] = fs.readFileSync(fn).toString().trim(); 
     } 
    }); 
    return macs; 
} 

console.log(getMACAddresses()); 

Die Funktion gibt ein Objekt, um die MAC-Adressen aller eth* Geräte enthalten. Wenn Sie alle Geräte, die eins haben, möchten, auch wenn sie z. genannt wlan*, einfach entfernen Sie die dev.substr(0, 3) == 'eth' überprüfen.

+1

ThiefMaster, danke für die schnelle Antwort. Ist "/ sys/class/net/eth?/Address" plattformübergreifend? – clayperez

+1

Wahrscheinlich nur für Linux. Es wird sicherlich nicht auf Windows funktionieren, nicht sicher über andere Betriebssysteme wie * BSD. – ThiefMaster

+0

Ich habe anfangs das GetMac-Modul verwendet, aber es wird nur die MAC-Adresse von dem ersten Gerät zurückgegeben, das es findet. In meinem Fall benötigte ich die MAC-Adresse von wlan0, so war in der Lage, leicht Ihren Code zu verwenden, um die MAC-Adresse wlan0 – Lucas

3

Wenn Sie gerade für eine einzigartige Server-ID suchen, könnten Sie die mongodb/BSON Ansatz und die ersten n Bytes des MD5-Hash der Hostname des Servers verwenden:

var machineHash = crypto.createHash('md5').update(os.hostname()).digest('binary'); 

Dieser Code ist von node-buffalo. Nicht perfekt, aber möglicherweise gut genug, je nachdem, was Sie versuchen zu tun.

2

Ich probierte das getmac Paket, aber es würde nicht für mich arbeiten (Knoten v0.10, Mac OS X) - also ich setzte und baute mein eigenes: https://github.com/scravy/node-macaddress. Es funktioniert unter Windows, OS X, Linux und wahrscheinlich jeder Unix mit ifconfig :-)

+0

zurückgeben Arbeitete perfekt! – Magico

0

Hier wird node.js Code Kommandozeilen-Tools mit MAC-Adresse zu erhalten:

`$ ifconfig | grep eth0 | awk '{print $5}'` 

für wlan0

`$ ifconfig | grep wlan0 | awk '{print $5}'` 

In node.js, verwenden Sie diese - den Code getMAC.js speichern - "$ Knoten getMAC.js"

`// Get MAC address - $ ifconfig | grep wlan0 | awk '{print $5}' 
var exec = require('child_process').exec; 
function puts(error, stdout, stderr) { console.log(stdout) } 
exec("ifconfig | grep wlan0 | awk '{print $5}'", puts); 
` 
+1

Aber wenn Sie die Wi-Fi-Mac-Adresse ausschalten wird eine Sammlung von Nullen –

+0

Dann verwenden Sie die eth0. – JamesNW