electron程序,如何才能获得网卡物理地址呢?”经常有新人这么提问,苏南大叔是这么建议大家的,请换个角度来考虑问题。electron是基于node的,那么node如何获得网卡的物理地址呢?这个问题是不是就变得可信多了。大家要学会思考问题,而不是老做伸手党,对吧?

苏南大叔:electron程序,如何获取网卡物理地址? - electron-getmac
electron程序,如何获取网卡物理地址?(图7-1)

本文测试环境:mac/electron@5.0.2/getmac@1.4.6。本文仅涉及到获取网卡物理地址,暂时不涉及获取别的硬件信息,请知悉。

下载安装

苏南大叔在本篇文章中,使用了一个第三方代码库,叫做getmac。其github主页地址是:

苏南大叔:electron程序,如何获取网卡物理地址? - github-getmac
electron程序,如何获取网卡物理地址?(图7-2)

通过npm在项目根目录下面安装,最方便省力。注意:是项目根目录下执行下面的命令。

npm install --save getmac

安装完成后,就可以在项目根目录下面的package.json里面,使用下面的命令了。不过很不常用,仅仅提供参考。

getmac-node

当然,因为并不是全局安装的结果,您更可能需要在项目根目录下面执行下面的命令:

./node_modules/.bin/getmac-node

苏南大叔:electron程序,如何获取网卡物理地址? - npm-install-getmac
electron程序,如何获取网卡物理地址?(图7-3)

在代码中使用

因为苏南大叔的测试机是mac,这里就先用大家已知的命令查看一下结果。

ifconfig

苏南大叔:electron程序,如何获取网卡物理地址? - ifconfig
electron程序,如何获取网卡物理地址?(图7-4)

苏南大叔:electron程序,如何获取网卡物理地址? - ifconfig-grep
electron程序,如何获取网卡物理地址?(图7-5)

从截图中可以发现:可预期的网卡物理地址有很多个。

以下的是在node代码中使用的范例,当然您也可以理解为在electron主进程中使用的范例:

苏南大叔:electron程序,如何获取网卡物理地址? - getmac-code
electron程序,如何获取网卡物理地址?(图7-6)

获取物理地址(推荐)

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程序,如何获取网卡物理地址? - getmac-source
electron程序,如何获取网卡物理地址?(图7-7)

总结

electron程序,既然大家都来了,就一定要有思考能力地取学习。加油~ 更多electron的精彩文章,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   node    electron

本站的忠实读者小伙伴,正在阅读下面这些文章: