原理:調用node.js的os.networkInterfaces()
返回一個對象,該對象包含已分配了網絡地址的網絡接口。
返回的對象上的每個鍵都標識了一個網絡接口。 關聯的值是一個對象數組,每個對象描述了一個分配的網絡地址。
分配的網絡地址的對象上可用的屬性包括:
address<string>
分配的 IPv4 或 IPv6 地址。netmask <string>
IPv4 或 IPv6 的子網掩碼。family <string>
IPv4 或 IPv6。mac <string>
網絡接口的 MAC 地址。internal <boolean>
如果網絡接口是不可遠程訪問的環回接口或類似接口,則爲 true,否則爲 false。scopeid <number>
數值型的 IPv6 作用域 ID(僅當 family 爲 IPv6 時指定)。cidr <string>
以 CIDR 表示法分配的帶有路由前綴的 IPv4 或 IPv6 地址。如果 netmask 無效,則此屬性會被設爲 null。
var os=require("os");
var mac = ''
var networkInterfaces=os.networkInterfaces();
for(var i in networkInterfaces){
for(var j in networkInterfaces[i]){
if(networkInterfaces[i][j]["family"]==="IPv4" && networkInterfaces[i][j]["mac"]!=="00:00:00:00:00:00" && networkInterfaces[i][j]["address"]!=="127.0.0.1"){
mac = networkInterfaces[i][j]["mac"]
}
}
}
console.log(mac) //01:02:03:0a:0b:0c
其中for...in
循環可以抽離出來處理以下格式數據:
let data = {
lo: [
{
address: '127.0.0.1',
netmask: '255.0.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: true,
cidr: '127.0.0.1/8'
},
{
address: '::1',
netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
family: 'IPv6',
mac: '00:00:00:00:00:00',
scopeid: 0,
internal: true,
cidr: '::1/128'
}
],
eth0: [
{
address: '192.168.1.108',
netmask: '255.255.255.0',
family: 'IPv4',
mac: '01:02:03:0a:0b:0c',
internal: false,
cidr: '192.168.1.108/24'
},
{
address: 'fe80::a00:27ff:fe4e:66a1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '01:02:03:0a:0b:0c',
scopeid: 1,
internal: false,
cidr: 'fe80::a00:27ff:fe4e:66a1/64'
}
]
}
for(let i in data){
for(let j in data[i]){
console.log(data[i][j])
}
}
//依次輸出,然後我們可以獲取項目裏面的信息而不必關注原對象中的key(如data中的lo和etn0)的具體值
{ address: '127.0.0.1',netmask: '255.0.0.0',family: 'IPv4',mac: '00:00:00:00:00:00',internal: true,cidr: '127.0.0.1/8' }
{ address: '::1',netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',family: 'IPv6',mac: '00:00:00:00:00:00',scopeid: 0,internal: true,cidr: '::1/128' }
{ address: '192.168.1.108',netmask: '255.255.255.0',family: 'IPv4',mac: '01:02:03:0a:0b:0c',internal: false,cidr: '192.168.1.108/24' }
{ address: 'fe80::a00:27ff:fe4e:66a1',netmask: 'ffff:ffff:ffff:ffff::',family: 'IPv6',mac: '01:02:03:0a:0b:0c',scopeid: 1,internal: false,cidr: 'fe80::a00:27ff:fe4e:66a1/64' }