Vue3 + Electron 技术栈下 MAC 地址获取的方法、准确性优化与应对策略

MAC 地址获取的准确性,尤其是在使用 Vue3 + Electron 技术栈时,我们可以采取以下几种策略来增强 MAC 地址获取的准确性和可靠性:


一、获取 MAC 的方法选择(Electron 环境)

1. 使用 node-macaddress 模块

这是最常见的方式,适用于跨平台应用。

  • 特点

    • 跨平台支持:Windows、macOS 和 Linux 都适用。
    • 提供多个网络接口的 MAC 地址信息,包括网卡名称(如 eth0, en0, vEthernet 等)和 MAC 值。
  • 代码示例

    js 复制代码
    const macaddress = require('macaddress');
    
    macaddress.all((err, allMacs) => {
      if (err) throw err;
    
      // 获取所有网卡的MAC信息,并过滤掉默认值或空值
      for (let key in allMacs) {
        const { interface: name, mac } = allMacs[key];
        console.log(`接口 ${name}: ${mac}`);
      }
    });
2. 使用 Electron API 和系统命令(Linux/macOS)

在某些平台上,比如 Linux 或 macOS 可以通过执行系统指令来获取 MAC 地址。

  • 特点
    • 精确控制输出内容。
    • 需要处理不同系统的差异性问题。
macOS 示例:
js 复制代码
const { exec } = require('child_process');

exec("ifconfig en0 | grep ether", (error, stdout, stderr) => {
  if (error || stderr) {
    console.error(`获取 MAC 失败: ${error || stderr}`);
    return;
  }
  const mac = stdout.trim().split(/\s+/)[1];
  console.log('MAC 地址:', mac);
});
Linux 示例:
js 复制代码
exec("ip link show | grep ether", (err, stdout) => {
  if (err) throw err;

  let lines = stdout.split('\n').filter(line => line.trim().length > 0);

  for (let i = 1; i < lines.length; i++) {
    const line = lines[i].trim();
    if (!line.includes('ether')) continue;
    const mac = line.split(/\s+/)[2];
    console.log("MAC 地址:", mac);
    break;
  }
});

二、提升 MAC 获取准确性的措施

1. 排除无效接口
  • 避免使用如 lo(回环接口)、vboxnet0(虚拟机网卡)等设备的 MAC 地址。
  • 使用正则或特定规则,过滤掉不适用的网络接口。
2. 选择主要网卡作为识别标识
  • 在所有 MAC 中挑选一个"主"网卡进行绑定,例如:
    • Windows 上使用 以太网无线 LAN 接口;
    • macOS 上使用 en0en1 等;
    • Linux 上使用 eth0
3. 多次获取并验证 MAC 地址
  • 对于不稳定的网络环境,可多次读取 MAC 值(如每隔几秒重新获取),如果出现变化,则判断为不可靠设备或网卡切换。
  • 也可设置一个"容错"机制,使用最后一次稳定读到的值作为最终 MAC。
4. 提前设定 MAC 白名单
  • 在服务器端维护 MAC 地址白名单;
  • 客户端获取到 MAC 后提交验证,若不在列表中,则认为无效。

三、应对 MAC 地址变更的策略

在某些特殊情况下(如网卡更换或系统重装),MAC 地址会变化。为了不影响许可证有效性:

1. 支持"设备换绑"
  • 允许管理员通过后台重新绑定许可证;
  • 用户可提交 MAC 变更请求,审核后更新数据库中的绑定信息。
2. 设置 MAC 切换的缓冲机制
  • 如果检测到当前 MAC 与授权 MAC 不一致,则进入"切换等待期",在一定时间内允许继续使用(如 5 分钟);
  • 超过限制时间则强制退出,或提示联系管理员重新授权。

四、补充说明

  • 在 Electron 环境中使用 node-macaddress 是最推荐的方式;
  • 避免在浏览器端直接获取 MAC 地址(受限于浏览器安全策略);
  • 若用于企业场景,可结合硬件指纹、BIOS 序列号等进行多重验证以提升识别准确性。

五、总结

获取方式 准确性 跨平台支持 容易出错点
node-macaddress 没有自动筛选网卡接口
系统命令(Linux/macOS) 中等 ❌ (仅限对应系统) 不稳定,受系统限制
Vue3/Browser API 无法获取MAC 安全策略不允许访问底层设备信息

因此,在 Electron 构建的客户端授权系统中,使用 node-macaddress 是最安全、可靠的方式。配合上述优化措施后,可以极大地提升 MAC 获取和验证的准确率。

相关推荐
ghostwritten2 小时前
macOS安装配置Unbound DNS完整指南
macos·策略模式·dns
ihui数学建模15 小时前
【Mac版】Linux 入门命令行快捷键+联想记忆
linux·运维·macos
万粉变现经纪人19 小时前
如何解决pip安装报错ModuleNotFoundError: No module named ‘dash’问题
python·scrapy·pycharm·flask·pip·策略模式·dash
可曾去过倒悬山1 天前
mac操作笔记
macos
可曾去过倒悬山1 天前
Mac上优雅简单地使用Git:从入门到高效工作流
git·elasticsearch·macos
山楂树の1 天前
模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)
python·macos·3d·图形渲染·blender
光头才能变强2 天前
Mac安装Navicat教程Navicat Premium for Mac v17.1.9 Mac安装navicat【亲测】
macos
Frilled Lizard2 天前
解决mac下git pull、push需要输入密码
git·macos
培根芝士2 天前
Electron将视频文件单独打包成asar并调用
前端·javascript·electron