2012-06-23 11 views
9

Vorrei sapere se esiste un modo per fare in modo che NODE recuperi gli indirizzi MAC del server su cui è in esecuzione.Posso recuperare un identificatore di macchina server univoco con node.js?

+0

Sede [questa risposta] (htt p: //stackoverflow.com/questions/16386371/get-the-mac-address-of-the-current-machine-with-node-js-using-getmac) per un altro suggerimento. – user3560651

+0

Questo pacchetto lo fa in modo multipiattaforma ed è testato sul nodo 0.10-0.12 e su io.js: https://github.com/scravy/node-macaddress - vedere il metodo 'one()'. – scravy

+0

Prova questo: https://www.npmjs.com/package/ee-machine-id – camposer

risposta

6

Il nodo non è dotato di accesso per accedere a questo tipo di dati di basso livello.

Tuttavia, è possibile eseguire ifconfig e analizzare il suo output o scrivere un'estensione C++ per il nodo che fornisce una funzione per recuperare l'indirizzo mac. Un altro modo semplice sta leggendo /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()); 

La funzione restituisce un oggetto contenente gli indirizzi MAC di tutti eth* dispositivi. Se desideri tutti i dispositivi che ne hanno uno, anche se sono ad es. chiamato wlan*, è sufficiente rimuovere il controllo dev.substr(0, 3) == 'eth'.

+1

ThiefMaster, grazie per la rapida risposta. "/ Sys/class/net/eth?/Address" è multipiattaforma? – clayperez

+1

Molto probabilmente solo per Linux. Certamente non funzionerà su Windows, non è sicuro di altri SO come * BSD. – ThiefMaster

+0

Inizialmente utilizzavo il modulo getmac, ma restituisce semplicemente l'indirizzo mac dal primo dispositivo che trova. Nel mio caso, ho richiesto l'indirizzo mac di wlan0 in modo da poter usare facilmente il tuo codice per ottenere l'indirizzo mac di wlan0 – Lucas

3

Se siete solo in cerca di un ID server univoco, si potrebbe prendere l'/ approccio BSON MongoDB e utilizzare i primi n byte del hash MD5 del nome host del server:

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

Questo codice è da node-buffalo. Non perfetto, ma potrebbe essere abbastanza buono a seconda di ciò che stai cercando di fare.

0

Qui è il codice node.js utilizzando gli strumenti da riga di comando per ottenere l'indirizzo MAC:

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

per wlan0

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

In node.js, utilizzare questo - salvare il codice a getMAC.js - "$ getMAC.js nodo" per eseguire

`// 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

Ma se si disattiva l'indirizzo MAC wifi sarà una raccolta di zero –

+0

Quindi utilizzare eth0. – JamesNW

Problemi correlati