MAC 地址生成器实战:看懂 48 位结构,造出不撞号的随机地址
讲清 MAC 地址的 48 位结构和前 24 位 OUI 厂商前缀,本地管理位与单播位怎么设,四种格式怎么挑,以及测试、虚拟机、隐私改 MAC 这些真实场景里随机生成该注意什么。
MAC 地址生成器实战:看懂 48 位结构,造出不撞号的随机地址
我自己排查过一个 DHCP 集成测试的怪 bug:测试里随手写死的 MAC 在某台同事的机器上正好和一块真网卡撞了号,交换机的 MAC 表抖了一下,排查花了大半天。从那以后我造测试用 MAC 一律走规则,不再拍脑袋填。这篇就把 MAC 地址的结构、那两个关键的标志位、四种写法,和随机生成时的几个坑一次讲透。
MAC 地址的 48 位结构
一个 MAC 地址是 48 位,也就是 6 个字节,12 个十六进制字符。它分成两半:前 24 位(前 3 个字节)是厂商部分,后 24 位(后 3 个字节)是设备部分。
前 24 位叫组织唯一标识符,英文是 OUI(Organizationally Unique Identifier),由 IEEE 分配给硬件厂商。比如 00:1B:63 是 Apple,00:1A:2B 是 Cisco,00:50:56 是 VMware,00:15:5D 是微软 Hyper-V。看到一个真实网卡的 MAC,把前 3 字节一查就知道它出自哪家。后 24 位由厂商自己分配给每块网卡,理论上同一个 OUI 下能编出 1600 多万个不同地址。
随机生成时,真正有讲究的是第一个字节。它的最低两位不是普通的数据,而是两个标志位,直接决定这个地址合不合法、会不会撞号。
本地管理位:别和真网卡撞号
第一个字节的第二低位是 U/L 位(本地管理位)。它为 0 时,地址是全球唯一的,绑定某个厂商 OUI,代表出厂烧录的真实网卡。它为 1 时,地址是本地管理的,意思是你自己分配的,IEEE 保证厂商绝不会发出这一类。
这就是我那次撞号的根源:完全随机的第一个字节,有一半概率落在全球唯一那一类,理论上就可能和某块真网卡重合。规矩做法是把 U/L 位置 1,地址会落在 02:xx、06:xx、0A:xx 或 0E:xx 这几个区间,稳稳待在私有范围里。凡是自造的地址,伪造的 MAC、虚拟机网卡、实验设备,几乎都该把这一位打开。
单播位:帧得能投到单台主机
第一个字节的最低位是 I/G 位。它为 0 是单播,帧投递给单台主机;为 1 是多播,投递给一组主机,比如 IPv4 多播的 01:00:5E:xx。
由此推出一条肉眼可判的规律:单播地址的第一个字节一定是偶数,像 00、02、AE;第一个字节是奇数(01、03、0F 这种)就是多播。如果随机生成时不管这一位,有一半概率造出个多播第一字节,交换机拿到会泛洪而不是转发给单个接口,行为就全错了。所以生成时务必强制单播,让第一个字节为偶数。
四种格式,挑工具链认的那种
同一组随机字节,落到不同工具里写法不一样。常用的有四种:
- 冒号式
00:1A:2B:3C:4D:5E,IEEE 和 Linux 的默认写法。 - 短横式
00-1A-2B-3C-4D-5E,Windows 的 ipconfig 打印出来就是这样。 - 思科点分式
001a.2b3c.4d5e,把六字节压成三组两字节,常见于 IOS 和交换机命令行。 - 无分隔式
001A2B3C4D5E,去掉所有分隔符,适合写进代码和配置文件。
每种再叠加大小写。挑哪种取决于你下游的工具吃哪种,粘进 IOS 就用点分,写进 YAML 就用无分隔。如果手上已经有一批格式乱七八糟的地址要统一,可以用 MAC 地址规范化工具 把它们转成同一种写法再用。
一个真实例子
按规矩生成一条给虚拟机用的地址,我会:锁定 OUI 为 VMware 的 00:50:56,打开本地管理位,强制单播,选冒号式小写。生成器跑一次,拿到这样一条:
00:50:56:9a:7f:c3
前 3 字节 00:50:56 一眼就是 VMware,宿主机会认账;后 3 字节 9a:7f:c3 是 Web Crypto API 出来的加密级随机,批量造 100 条也几乎不可能内部撞号。第一个字节 00 是偶数,确认是单播。整段直接粘进 libvirt 或 Vagrant 配置就行。
这些地址到底用在哪
随机 MAC 的常见场景有这么几类:
第一类是测试。给 DHCP 服务器或资产 API 写集成测试,需要逼真但绝不会和真网络重合的地址。打开本地管理位生成一批,下载成 .txt 喂进种子脚本,把结果存下来而不是存生成器,重跑就保持确定。
第二类是虚拟机和容器。批量起 VM 时每张虚拟网卡都要不同 MAC,锁 OUI、设本地管理位、一次生成 100 条整段粘进配置即可。
第三类是隐私防追踪。门户认证页和门店分析会拿你笔记本广播的 MAC 做指纹,跨会话跟住你。生成一个新的本地管理单播地址,重连前设为接口 MAC,追踪器每次看到的就是一台新设备。
最后提一句:生成的 MAC 只是一串字节,它不在任何地方登记设备,不持久化撑不过一次重启,改起来也毫不费力,别拿它当认证密钥或授权码。想直接动手,打开 MAC 地址生成器,选好格式和那两个标志位就能批量出地址,全程在浏览器本地完成。
Made by Toolora · Updated 2026-06-13