electron程序,如何获取网卡物理地址?
发布于 作者:苏南大叔 来源:程序如此灵动~“electron
程序,如何才能获得网卡物理地址呢?”经常有新人这么提问,苏南大叔是这么建议大家的,请换个角度来考虑问题。electron
是基于node
的,那么node
如何获得网卡的物理地址呢?这个问题是不是就变得可信多了。大家要学会思考问题,而不是老做伸手党,对吧?
本文测试环境:mac
/electron@5.0.2
/getmac@1.4.6
。本文仅涉及到获取网卡物理地址,暂时不涉及获取别的硬件信息,请知悉。
下载安装
苏南大叔在本篇文章中,使用了一个第三方代码库,叫做getmac
。其github
主页地址是:
通过npm
在项目根目录下面安装,最方便省力。注意:是项目根目录下执行下面的命令。
npm install --save getmac
安装完成后,就可以在项目根目录下面的package.json
里面,使用下面的命令了。不过很不常用,仅仅提供参考。
getmac-node
当然,因为并不是全局安装的结果,您更可能需要在项目根目录下面执行下面的命令:
./node_modules/.bin/getmac-node
在代码中使用
因为苏南大叔的测试机是mac
,这里就先用大家已知的命令查看一下结果。
ifconfig
从截图中可以发现:可预期的网卡物理地址有很多个。
以下的是在node
代码中使用的范例,当然您也可以理解为在electron
主进程中使用的范例:
获取物理地址(推荐)
require('getmac').getMac(function(err, macAddress){
if (err) throw err
console.log(macAddress)
})
这个就是大家千呼万唤的获取网卡物理地址功能,代码里面的throw err
,大家请注意慎重处理错误的情况。而对于macaddress
,多个网卡的时候,也只是返回一条网卡数据的。在苏南大叔的测试中,返回的是ifconfig
的最后一条数据中的网卡地址。
获取特定网卡物理地址
require('getmac').getMac({iface: 'eth0'}, function(err, macAddress){
if (err) throw err
console.log(macAddress)
})
这条语句就是针对多个网卡可用的时候,获取指定网卡物理地址的方式,其中eth0
就是网卡的编号,大家可以使用ifconfig
或者ipconfig
命令来获得可用的网卡名称。
值得注意的是:eth0
这个网卡,可不是所有的电脑上面都有的。所以,这里throw err
的概率是很大的。
判断物理地址是否正确
if ( require('getmac').isMac("e4:ce:8f:5b:a7:fc") ) {
console.log('valid mac')
}
else {
console.log('invalid mac')
}
这个isMac
,是说对后面传递进来的参数进行检测。就类似于常见的isIp
函数,检测格式而已。不要多想,就仅仅是检测格式,一个很没有啥用途的功能。
基本原理
苏南大叔从从下面的代码中,看到了getMac
函数的定义。就可以看到作者的思路了。文件是:
/source/index.coffee
里面可以找到一句:
command = if isWindows then "%SystemRoot%/System32/getmac.exe" else "/sbin/ifconfig -a || /sbin/ip link"
所以,这个代码的基本原理就是执行ifconfig
,然后再进行正则匹配获得数据的。
总结
electron
程序,既然大家都来了,就一定要有思考能力地取学习。加油~ 更多electron
的精彩文章,请点击苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。