node.js獲取本機mac地址

原理:調用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' }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章