2013-05-05 37 views
5

私はthis questionで作業しています。getmacを使って現在のマシンのMACアドレスをnode.jsで取得します。

今、私はnode.js.と現在のマシンのMACアドレスを取得するためにgetmac

を使用しようとしています

私はインストール手順に従った。私はこのコードを実行するときしかし:

エラー:

require('getmac').getMac(function(err,macAddress){ 
    if (err) throw err; 
    console.log(macAddress);  
}); 

を私はこのエラーを取得するコマンドが失敗しました: コマンド「getmac」

あなたがこれを取得する方法を知っています

を見つけることができませんでした作業?

+0

Er ...どのプラットフォームをどのように実行していますか? –

+0

モジュールをインストールしましたか? 'npm install getmac'? – drinchev

+0

@JoachimIsakssonノードバージョン0.8.16 –

答えて

-1

rootユーザーまたはコマンドで実行する必要があります。

+0

例、スクリプト、または正確な提案はしていないし、* rootとして実行していない* isnコンピュータのMACアドレスを取得するためには非常に必要です。 – ArchNoob

3

Node.JSスクリプトは、リンクローカルIPv6アドレスを調べることによって、現在のマシンのMACアドレスを検出できます。 (注意:O/S内でIPv6スタックをアクティブにする必要がありますが、これはますます一般的です)

http://en.wikipedia.org/wiki/IPv6_address#Modified_EUI-64

  1. に基づいて

    LL: fe80::0211:22ff:fe33:4455 
    MAC:  0011:22  33:4455 
    

    Windows上でXOR 0x020000000000

を使用して

  • ビット単位の反転ビット#41ミドル
  • から を0xFFFEというを削除するには、実行してrandomizeidentifiersを無効にする必要があります昇格したコマンド:

    netsh interface ipv6 set global randomizeidentifiers=disabled 
    

    次のコードは、バリアント1 UUID(尾の発生は一度だけ起こる)を生成するためにこの技術を使用して各ネットワークインタフェースのMACアドレスは、例えば、os.networkInterfaces()の出力であるNodeJS≥0.11で

    function generateUUID() { 
        generateUUID.tail = generateUUID.tail || (function(nics) { 
         var nic, index, addr, retn; 
         for (nic in nics) { // try to obtain the MAC address from the IPv6 scope-local address 
          for (index in nics[nic]) { 
           addr = nics[nic][index]; 
           if (!addr.internal) { 
            if (addr.address.indexOf('fe80::') === 0) { // found scope-local 
             retn = retn || addr.address.slice(6).split(/:/).map(function(v, i, a) { 
              return parseInt(v, 16); 
             }); 
            } 
           } 
          } 
         } 
         if (!retn) { // no IPv6 so generate random MAC with multicast bit set 
          index = Math.pow(2, 16); 
          retn = []; 
          retn.push(Math.floor(Math.random() * index) | 0x1000); // set multicast bit 
          retn.push(Math.floor(Math.random() * index)); 
          retn.push(Math.floor(Math.random() * index)); 
          retn.push(Math.floor(Math.random() * index)); 
         } 
         retn[3] = 0x10000 | retn[3]; 
         retn[2] = 0x10000 | retn[1] & 0xff00 | retn[2] & 0x00ff; // eliminate FFFE from xxxx:xxFF:FExx:xxxx 
         retn[1] = 0x10000 | retn[0]^0x0200; // invert bit#41 
         retn[0] = 0x18000 | process.pid & 0x3fff; 
         retn = retn.map(function(v, i, a) { 
          return v.toString(16).slice(1) 
         }); 
         return retn[0] + '-' + retn[1] + retn[2] + retn[3]; 
        })(require('os').networkInterfaces()); 
    
        var head = process.hrtime(), now = Math.floor(Date.now()/1000); 
        head[1] = Math.floor(head[1] * 0.268435456); // 2^28/10^9 
        head[2] = (0x11000 | head[1] & 0x0fff).toString(16).slice(1); 
        head[1] = (0x10000 | head[1] >>> 12 & 0xffff).toString(16).slice(1); 
        head[0] = (4294967296 + now).toString(16).slice(1); 
        return head.concat(generateUUID.tail).join('-'); 
    }; 
    
    9

    を0.10≤NodeJSで

    require('os').networkInterfaces() 
    
    { eth0: 
        [ { address: 'fe80::cae0:ebff:fe14:1dab', 
         netmask: 'ffff:ffff:ffff:ffff::', 
         family: 'IPv6', 
         mac: 'c8:e0:eb:14:1d:ab', 
         scopeid: 4, 
         internal: false }, 
        { address: '192.168.178.22', 
         netmask: '255.255.255.0', 
         family: 'IPv4', 
         mac: 'c8:e0:eb:14:1d:ab', 
         internal: false } ] } 
    

    あなた自身のMACアドレスを見つける必要があり、それであなたを助けるためにパッケージがあります。node-macaddress(免責事項:私が言ったパッケージの作者だが)。

    あなたが非同期バージョンを使用する必要はありませんノード≥0.11でちょうど

    require('node-macaddress').one(function (err, addr) { console.log(addr); } 
    

    を行うことができますように、このパッケージには、お使いのホストのための1つのインタフェースを選択:あなたがしているので

    var addr = require('node-macaddress').one(); 
    

    を通常は "hosts macaddress"にしか興味がありません(ただし、ホストが個々のmacアドレスを持つ複数のネットワークインタフェースを持つことはできません)。

    +0

    これは8.0.0の直後に動作を停止しました。現時点では、8.1.3はまだデバイス内のmac(ローカルではない)のゼロを返しています。彼らは彼らの8.0.0のコードを元に戻すまでパッチを当てる必要がありますか? ip addrは/ etherをリンクしますが、他のものはより良いでしょう。 –

    2

    コマンドプロンプト/端末でgetmacをNPMをインストールし使用してnode_module getmacをインストールする必要があります。その後、それは動作します。

    +0

    はい、これは私のために働く、ありがとう@Pavani –

    関連する問題