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?
Antwort
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.
ThiefMaster, danke für die schnelle Antwort. Ist "/ sys/class/net/eth?/Address" plattformübergreifend? – clayperez
Wahrscheinlich nur für Linux. Es wird sicherlich nicht auf Windows funktionieren, nicht sicher über andere Betriebssysteme wie * BSD. – ThiefMaster
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
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.
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
:-)
zurückgeben Arbeitete perfekt! – Magico
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);
`
Aber wenn Sie die Wi-Fi-Mac-Adresse ausschalten wird eine Sammlung von Nullen –
Dann verwenden Sie die eth0. – JamesNW
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
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
Versuchen Sie diesen: https://www.npmjs.com/package/ee-machine-id – camposer