私は取り組んでいます この質問 。
今私は使用しようとしています getmac
node.jsを使用して現在のマシンのMACアドレスを取得します。
インストール手順に従いました。しかし、私がこのコードを実行すると:
require('getmac').getMac(function(err,macAddress){
if (err) throw err;
console.log(macAddress);
});
このエラーが発生します:
エラー:コマンドが失敗しました:コマンド「getmac」が見つかりませんでした
これを機能させる方法を知っていますか?
NodeJS≥0.11では、各ネットワークインターフェイスのMACアドレスはos.networkInterfaces()
の出力にあります。
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 } ] }
NodeJS≤0.10では、自分でMACアドレスを見つける必要がありますが、それを支援するパッケージがあります: node-macaddress (免責事項:私はそのパッケージの作成者です)。
このパッケージはまた、ホスト用に1つのインターフェースを選択するため、
require('node-macaddress').one(function (err, addr) { console.log(addr); }
ノード≥0.11では、非同期バージョンを使用する必要はありません。
var addr = require('node-macaddress').one();
通常は「ホストのMACアドレス」にのみ関心があるため(ホストが複数のネットワークインターフェイスを持ち、それぞれが個別のMACアドレスを持つことができるなどのことはありません)、この呼び出しで正確にわかります。
Node.JSスクリプトは、リンクローカルIPv6アドレスを調べることにより、現在のマシンのMACアドレスを検出できます。 (警告:これには、IPv6スタックがO/S内でアクティブである必要がありますが、これはますます一般的になっています)
例えば.
LL: fe80::0211:22ff:fe33:4455
MAC: 0011:22 33:4455
に基づく http://en.wikipedia.org/wiki/IPv6_address#Modified_EUI-64
Windowsでは、levatedコマンドを実行してrandomizeidentifiersを非アクティブ化する必要があります。
netsh interface ipv6 set global randomizeidentifiers=disabled
次のコードは、この手法を使用してVariant 1 UUIDを生成します(テール生成は1回だけ発生します)。
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('-');
};
コマンドプロンプト/ターミナルでnpm install getmacを使用してgetmac node_moduleをインストールする必要があります。その後、それは動作します。