Kan ik een unieke servermachine-ID ophalen bij node.js?

Ik zou graag willen weten of er een manier is om NODE de MAC-adres (sen) van de server waarop het draait te laten ophalen.

10
Dit pakket doet het op een platformonafhankelijke manier en wordt getest op knooppunt 0.10-0.12 en ook op io.js: github.com/scravy/node-macaddress - zie de one() methode.
toegevoegd de auteur scravy, de bron
toegevoegd de auteur camposer, de bron
Zie dit antwoord voor een andere suggestie.
toegevoegd de auteur user3560651, de bron

4 antwoord

Node heeft geen ingebouwde was om toegang te krijgen tot dit soort low-level data.

U kunt echter ifconfig uitvoeren en de uitvoer ervan verwerken of een C ++ - extensie schrijven voor een knooppunt dat een functie biedt om het mac-adres op te halen. Een nog eenvoudigere manier is het lezen van /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());

De functie retourneert een object dat de mac-adressen bevat van alle eth * -apparaten. Als u alle apparaten wilt die er een hebben, zelfs als ze bijvoorbeeld genaamd wlan * , verwijder eenvoudig de dev.substr (0, 3) == 'eth' controle.

7
toegevoegd
Waarschijnlijk alleen linux. Het werkt zeker niet op Windows, niet zeker van andere besturingssystemen zoals * BSD.
toegevoegd de auteur ThiefMaster, de bron
Ik was in eerste instantie gebruik van de getmac-module, maar het zal alleen het mac-adres teruggeven van het eerste apparaat dat het vindt. In mijn geval had ik het mac-adres van wlan0 nodig, dus kon ik gemakkelijk je code gebruiken om het mac-adres van wlan0 te krijgen
toegevoegd de auteur Lucas, de bron
Knooppunt ≥ 0,11 en ook iojs retourneren mac-adressen in de uitvoer van os.networkInterfaces()
toegevoegd de auteur scravy, de bron
ThiefMaster, bedankt voor de snelle reactie. Is "/ sys/class/net/eth?/Address" platformoverschrijdend?
toegevoegd de auteur clayperez, de bron

Als u alleen op zoek bent naar een unieke server-id, kunt u de mongodb/bson-methode gebruiken en de eerste n bytes van de md5-hash van de hostnaam van de server gebruiken:

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

Deze code is van node-buffalo . Niet perfect, maar misschien wel goed genoeg, afhankelijk van wat je probeert te doen.

4
toegevoegd

Ik heb het getmac -pakket geprobeerd, maar het zou niet werken voor mij (node ​​v0.10, Mac OS X) - dus ik ging op pad en bouwde er zelf een: https://github.com/scravy/node-macaddress. Het werkt in Windows, OS X, Linux en waarschijnlijk elke unix met ifconfig :-)

2
toegevoegd
Perfect gewerkt!
toegevoegd de auteur Magico, de bron

Hier is de code node.js met behulp van opdrachtregelprogramma's om het MAC-adres te verkrijgen:

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

voor wlan0

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

Gebruik in node.js dit - sla de code op om getMAC.js - "$ node getMAC.js" te draaien

`// 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);
 `
0
toegevoegd
Maar als je het wifi-adres uitschakelt, is het mac-adres een verzameling nullen
toegevoegd de auteur Shairon Toledo, de bron
Gebruik vervolgens de eth0.
toegevoegd de auteur JamesNW, de bron