2012-06-23 11 views
9

मैं जानना चाहता हूं कि एनओडीई सर्वर के मैक पते (एसएस) को पुनर्प्राप्त करने का कोई तरीका है जिस पर यह चल रहा है।क्या मैं node.js के साथ एक अद्वितीय सर्वर मशीन पहचानकर्ता ला सकता हूं?

+0

सी [इस उत्तर] (HTT को चलाने के लिए "$ नोड getMAC.js" - getMAC.js करने के लिए कोड को बचाने पी: //stackoverflow.com/questions/16386371/get-the-mac-address-of-the-current-machine-with-node-js-using-getmac) एक और सुझाव के लिए। – user3560651

+0

यह पैकेज इसे क्रॉस-प्लेटफ़ॉर्म तरीके से करता है और नोड 0.10-0.12 के साथ-साथ io.js पर भी परीक्षण किया जाता है: https://github.com/scravy/node-macaddress - 'एक() 'विधि देखें। – scravy

+0

इसे आजमाएं: https://www.npmjs.com/package/ee-machine-id – camposer

उत्तर

6

इस प्रकार के निम्न स्तर के डेटा तक पहुंचने के लिए नोड में कोई अंतर्निहित नहीं था।

हालांकि, आप ifconfig निष्पादित कर सकते हैं और इसके आउटपुट को पार्स कर सकते हैं या नोड के लिए सी ++ एक्सटेंशन लिख सकते हैं जो मैक पते को पुनर्प्राप्त करने के लिए एक फ़ंक्शन प्रदान करता है। एक और भी आसान रास्ता /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()); 

समारोह एक वस्तु सभी eth* उपकरणों के मैक पतों युक्त देता है। यदि आप सभी उपकरणों को चाहते हैं जिनके पास एक है, भले ही वे उदा। wlan* कहा जाता है, बस dev.substr(0, 3) == 'eth' चेक को हटा दें।

+1

ThiefMaster, त्वरित प्रतिक्रिया के लिए धन्यवाद। क्या "/ sys/class/net/eth?/पता" क्रॉस-प्लेटफॉर्म है? – clayperez

+1

सबसे अधिक संभावना लिनक्स-केवल। यह निश्चित रूप से विंडोज़ पर काम नहीं करेगा, बीएसडी जैसे अन्य ओएस के बारे में निश्चित नहीं है। – ThiefMaster

+0

मैं शुरुआत में गेटमैक मॉड्यूल का उपयोग कर रहा था, हालांकि यह पहले डिवाइस से मैक पता वापस लौटाएगा। मेरे मामले में, मुझे wlan0 का मैक पता आवश्यक था, इसलिए wlan0 – Lucas

3

तुम सिर्फ एक अनूठा सर्वर आईडी के लिए देख रहे हैं, तो आप MongoDB/bson दृष्टिकोण लेने के लिए और सर्वर के होस्ट नाम के MD5 हैश के पहले n बाइट्स इस्तेमाल कर सकते हैं:

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

इस कोड है node-buffalo से। सही नहीं है, लेकिन आप जो करने की कोशिश कर रहे हैं उसके आधार पर पर्याप्त अच्छा हो सकता है।

2

मैंने getmac पैकेज की कोशिश की लेकिन यह मेरे लिए काम नहीं करेगा (नोड v0.10, मैक ओएस एक्स) - इसलिए मैंने अपना खुद का सेट और बनाया: https://github.com/scravy/node-macaddress। यह Windows, ओएस एक्स, लिनक्स में काम करता है, और शायद के साथ हर यूनिक्स ifconfig कमांड लाइन उपकरण का उपयोग कर Node.js कोड है मैक पता प्राप्त करने के लिए :-)

+0

के आउटपुट में मैक पते वापस कर देगा पूरी तरह से काम किया! – Magico

0

यहाँ:

wlan0

के लिए
`$ ifconfig | grep eth0 | awk '{print $5}'` 

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

Node.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

लेकिन यदि आप वाईफाई मैक पता बंद करते हैं तो शून्य –

+0

का संग्रह होगा, फिर eth0 का उपयोग करें। – JamesNW

संबंधित मुद्दे