2012-06-23 29 views
9

Chciałbym wiedzieć, czy istnieje sposób na to, aby NODE odzyskał adres (y) MAC serwera, na którym działa.Czy mogę pobrać unikalny identyfikator komputera serwera z plikiem node.js?

+0

patrz [to Answer] (HTT p: //stackoverflow.com/questions/16386371/get-the-mac-address-of-the-current-mine-with-node-js-using-getmac) dla innej sugestii. – user3560651

+0

Ten pakiet robi to na wiele platform i jest testowany na węźle 0.10-0.12, a także na io.js: https://github.com/scravy/node-macaddress - patrz metoda 'one()'. – scravy

+0

Wypróbuj ten: https://www.npmjs.com/package/ee-machine-id – camposer

Odpowiedz

6

Węzeł nie ma wbudowanego dostępu do tego rodzaju danych niskiego poziomu.

Można jednak wykonać ifconfig i przeanalizować jego wynik lub napisać rozszerzenie C++ dla węzła, który udostępnia funkcję odzyskiwania adresu mac. Jeszcze łatwiejszy sposób czyta /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()); 

Funkcja zwraca obiekt zawierający adresy MAC wszystkich urządzeń eth*. Jeśli chcesz mieć wszystkie urządzenia, które je mają, nawet jeśli są np. o nazwie wlan*, po prostu usuń zaznaczenie dev.substr(0, 3) == 'eth'.

+1

ThiefMaster, dzięki za szybką odpowiedź. Czy jest "/ sys/class/net/eth?/Address" międzyplatformowy? – clayperez

+1

Najprawdopodobniej tylko dla systemu Linux. Z pewnością nie będzie działać na oknach, nie jestem pewien innych systemów, takich jak * BSD. – ThiefMaster

+0

Początkowo korzystałem z modułu getmac, ale po prostu zwróci on adres MAC z pierwszego znalezionego urządzenia. W moim przypadku wymagałem adresu mac wlan0, więc mogłem z łatwością użyć twojego kodu, aby uzyskać adres mac wlan0 – Lucas

3

Jeśli szukasz po prostu unikatowy identyfikator serwera, można wziąć MongoDB podejście/bson i używać pierwsze n bajtów hash MD5 nazwy hosta serwera:

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

Kod ten jest od node-buffalo. Nie doskonały, ale może być wystarczająco dobry w zależności od tego, co próbujesz zrobić.

0

Oto kod node.js za pomocą narzędzi wiersza poleceń, aby uzyskać adres MAC:

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

dla wlan0

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

W node.js, użyj tego - zapisać kod do getMAC.js - "$ node getMAC.js", aby uruchomić

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

Ale jeśli wyłączysz adres wifi mac będzie zbiorem zer –

+0

Następnie użyj eth0. – JamesNW

Powiązane problemy