node.js获取本机mac地址_node.js如何拿苹果电脑的mac地址-程序员宅基地

技术标签: node.js  JavaScript  前端  Node.js  javascript  

原理:调用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' }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42002487/article/details/106984642

智能推荐

python实现stack(栈)和队列(queue)_python stack queue-程序员宅基地

文章浏览阅读9.7k次,点赞4次,收藏28次。栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于: stack:后进先出 栈示意图queue:先进先出 队列示意图 注意,stack和queue是没有查询具体某一个位置的元素的操作的。但是他们的排列是按顺序的对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。_python stack queue

纠正:Android RecyclerView滚动到指定位置并置顶(滚动方法、移动置顶、定位滑动到指定位置item)_groupedrecyclerviewadapter跳到指定item-程序员宅基地

文章浏览阅读3.1w次,点赞61次,收藏107次。最近博主发现让RecyclerView滑动到某一位置并置顶的博客一大堆,抄的是完全一模一样。此外,虽然这些博客“解决”了这些问题,但这种解决方案过于浅显、粗暴,甚至都违背了开发思想。遂在此纠正这种错误。RecyclerView提供了几种移动的方法scrollToPositionscrollToscrollBysmoothScrollBysmoothScrollToPosit..._groupedrecyclerviewadapter跳到指定item

资深研发转变为架构师意味着什么_研发经理和架构师-程序员宅基地

文章浏览阅读3k次。架构师 日常工作_研发经理和架构师

Android studio关联svn-程序员宅基地

文章浏览阅读644次。公司内部搭建基于git版本管理的平台Gitlab挂了,为记录下自己版本更迭的代码情况,又不想代码泄露。选择使用早先自己搭建的svn环境,记录下过程,免得后面再度使用时候又遗忘了步骤。kotlin被宣布作为开发Android APP的官方语言已经接近一年,除去开始蹭下热度,稍稍感受下语法变化,未有更进一步的了解。此时,闲来无事,加上近期看到的些项目陆续都有以kotlin作为开发语言的情况,还..._android studio关联svn

mysql 增加操作_MySQL操作初级-程序员宅基地

文章浏览阅读244次。MySQLMySQL 数据库创建数据库create database if not exists user default charset utf8;创建数据库,该命令的作用:如果数据库不存在则创建,存在则不创建。创建user数据库,并设定编码集为utf8删除数据库删库有风险,动手需谨慎drop database user;MySQL 数据表创建MySQL数据表需要以下信息:表名表字段名定义每个表..._增加操作

c++学习日记之使用类来模拟随机漫步_程序地漫步-程序员宅基地

文章浏览阅读1.4k次。本文主要介绍运算符重载和友元的类设计,通过定义一个矢量类来模拟随机漫步。矢量类分两种模式,直角坐标模式和极坐标模式。该函数允许用户选择行走的距离和补偿。该程序用一个变量表示位置,并报告到达指定距离住所需的部署。本文的重点是是理解运算符重载和友元函数代码如下:vector.h文件#ifndef VECTOR_H_#define VECTOR_H_#includenamespac_程序地漫步

随便推点

GitHub集成Circle CI(附 Circle CI 配置示例文件)_circleci building status github-程序员宅基地

文章浏览阅读1.6k次。文章目录GitHub 集成Circle CICI(持续集成) 简单解释CI 工具Circle的使用将GitHub项目授权给 Circle CI书写 config.yml文件测试 Circle CI 配置文件是否生效备注写在最后GitHub 集成Circle CICI(持续集成) 简单解释CI 即 Continuous Integration. 当代码提交上来有变动的时候,在merge之前自动进行一些流程,如:代码风格检查、单元测试是否通过等。当被merge之后,又会自动进行一些流程,如:自动打包、_circleci building status github

matlab题目如何在一个圆形区域进行三维作图_meshgrid ,边界是圆-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏7次。不废话上图[r,t]=meshgrid(0:0.1:2,0:0.02:2*pi);x=r.*cos(t);y=r.*sin(t);z=x.^2+y.^2;mesh(x,y,z)其实在数学上使用了一个圆的参数方程来实现绘制区域为圆形的效果在这个区域上面是一个碗状图形_meshgrid ,边界是圆

jwt token注销_如何用SpringBoot集成JWT实现token验证及token注销?一招教会你-程序员宅基地

文章浏览阅读763次。Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT 可以使用HMAC算法或者是RSA的公私秘钥对进行签名。JWT 请求流程这里还要注意:光理论是不够的。在此顺便送大家十套20..._springboot jwt 注销登陆

Lock锁的使用-程序员宅基地

文章浏览阅读1.6w次,点赞25次,收藏108次。在Java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5后新增的ReentrantLock类同样可达到此效果,且在使用上比synchronized更加灵活。观察ReentrantLock类可以发现其实现了Lock接口public class ReentrantLock implements Lock,java.io.Serializable1、使用Re..._lock锁的使用

HttpServletRequest 和 HttpServletResponse详解-程序员宅基地

文章浏览阅读465次。用HttpServletRequest,现在整理如下,以便以后查阅请求与响应相关的类和接口非常多,下表是主要的与请求和接口相关的类以及接口。主要的与请求和接口相关的类及接口方 法说 明ServletInputStreamServlet的输入流ServletOutputStreamServlet的输出流ServletRequest代表Servl...

关于Dbeaver的常用操作_dbeaver查看字段注释-程序员宅基地

文章浏览阅读3.6w次,点赞6次,收藏46次。dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。在开发过程中能够极大的提升我们的工作效率,下面我把我日常使用到的功能描述一下:1:与plsql相比,Dbeaver没有右击直接查看表注释的功能,但是Dbeaver提供了一个“打开声明”的功能,里面可以查看一些比较实用的内容:表列注释、创建该表的create语句:2:在一般开发的情况下,往往需要查询的数据条数不会..._dbeaver查看字段注释

推荐文章

热门文章

相关标签