與this question in C#類似,NodeJS可能在從網絡斷開連接時獲取計算機的MAC地址嗎?NodeJS - 脫機時獲取MAC地址
我一直在使用macaddress模塊,該模塊在用戶連接到網絡時效果很好 - 但如果用戶斷開連接,macaddress
將不會在某些系統上返回任何地址。
我注意到os.networkInterfaces()
當用戶離線/在線,以及跨Windows/Mac和Node v10/v12的行爲差異之間的一些差異。我不確定問題實際上在哪裏。
與this question in C#類似,NodeJS可能在從網絡斷開連接時獲取計算機的MAC地址嗎?NodeJS - 脫機時獲取MAC地址
我一直在使用macaddress模塊,該模塊在用戶連接到網絡時效果很好 - 但如果用戶斷開連接,macaddress
將不會在某些系統上返回任何地址。
我注意到os.networkInterfaces()
當用戶離線/在線,以及跨Windows/Mac和Node v10/v12的行爲差異之間的一些差異。我不確定問題實際上在哪裏。
我剛剛使用getmac模塊進行了測試,並且可以在離線(和在線)下正常工作。
,您可以嘗試這樣的:
require('getmac').getMac(function(err,macAddress){
if (err) throw err
console.log(macAddress) // 77:31:c2:c5:03:10
})
如果你不想使用一個模塊,您還可以要求每個MAC地址的接口是這樣的(節點> = 0.11):
require('os').networkInterfaces()
然後根據您的需要解析它。
結果應該是這樣的:
{ lo0:
[ { address: '::1',
netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 0,
internal: true },
{ address: '127.0.0.1',
netmask: '255.0.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: true },
{ address: 'fe80::1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 1,
internal: true } ],
en0:
[ { address: '10.3.162.15',
netmask: '255.255.254.0',
family: 'IPv4',
mac: '77:31:c2:c5:03:10',
internal: false } ],
vboxnet0:
[ { address: '192.168.33.1',
netmask: '255.255.255.0',
family: 'IPv4',
mac: '0a:00:27:00:00:00',
internal: false } ],
en3:
[ { address: '10.3.32.45',
netmask: '255.255.248.0',
family: 'IPv4',
mac: '0c:4d:e7:3d:3d:17',
internal: false } ] }
目前面臨着同樣的情況。基於知道我們已知的接口的IP地址,我結束了以下代碼。
var os = require('os');
var getNetworkDataForThisIP = function(ipOfTheInterfaceWanted) {
var networkInterfaces = os.networkInterfaces();
var selectedInterfaceData;
Object.keys(networkInterfaces).forEach((NetworkID, index, obj) => {
networkInterfaces[NetworkID].forEach((data) => {
if (data.family == "IPv4" && ipOfTheInterfaceWanted== data.address) {
//I created new Object because the NetworkID is not provided in the 'data' object
selectedInterfaceData = {
network: NetworkID,
address: data.address,
netmask: data.netmask,
family: data.family,
mac: data.mac,
};
}
});
});
return selectedInterfaceData;
}
var data = getNetworkDataForThisIP("192.168.5.1")
console.log(data.network);
console.log(data.address);
console.log(data.netmask);
console.log(data.family);
console.log(data.mac);
您可以修改根據一些你已經知道,以配合您的需要。
實際上沒有回答與離線的問題,但您可以檢查!!data
的狀態。
我豎起大拇指,但我建議不要在實際代碼中將IP地址放在字符串常量中,甚至不是一個例子。有些新手可能會認爲在實際操作中可以這麼做。 – FauChristian
是的,在其他上下文中,將其保留爲按位比較的32位數字可能是有用的,但在此特定情況下,檢查位於來自os.networkInterfaces();的字符串之間。 –
我也嘗試過使用'getmac',但它在Windows上拋出錯誤 - 所以這並沒有給我太多信心。 – arthurakay
如何使用'require('os')。networkInterfaces()'? – Gepser
我的windows機器在離線時(僅在「Loopback Pseudo-Interface 1」下)報告MAC'00:00:00:00:00:00'。因此,當在線時匹配這些地址時,顯然不是該機器的唯一MAC地址 - 並且在脫機時不報告其他網絡接口。 – arthurakay