如何从 Linux 命令行生成随机 MAC 地址?
我寻找一种只需要在 Linux 命令行上常见的标准工具的解决方案。
该 MAC 地址将用于来宾 KVM。
答案1
我用
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
与完全随机数相比,此方法的好处在于,可以根据机器的 FQDN 可靠地重现 MAC 地址,我发现这有时很有用。第02
一个八位字节仅设置“本地分配”位,这显然不是供应商提供的 MAC 地址,并保证您不会与真实 NIC 的 MAC 地址发生冲突。
如果需要为每个主机生成多个 MAC 地址,我曾经将 FQDN 与要连接接口的网桥的名称连接起来;这很好地将不同 NIC 的内容分散开了。
答案2
发布的脚本很好,但我想添加一个警告:注意生日(悖论)!
这是因为,即使只有 23 个人,其中 2 个人生日在同一天的可能性也高达 50%。
这取决于您如何使用它,但是如果您随机生成 MACS,当 MAC 数约为 100 万时,发生冲突的可能性为 40%,而当 MAC 数为 200 万时,发生冲突的可能性就已经达到 87%!
如果您只需要几个,这是可以的,但是当您维护一个包含数百台服务器的服务器场时,每个服务器都托管数十台虚拟机,或者如果您使用 mac 作为某些数据库中的索引进行簿记,并且需要唯一性,那么就要小心了!
答案3
这些变体也有效。
更长:
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
或更短:
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
根据随时间推移的快速测量,两种变体的负载消耗非常相似。
答案4
myserver% perl -e 'for ($i=0;$i<6;$i++){@m[$i]=int(rand(256));} printf "%X:%X:%X:%X:%X:%X\n",@m;'
55:C2:A5:FA:17:74
啊,老瑞士军用电锯再次骑行。通过 0.2 版本,我毫不掩饰地窃取了 Womble 关于第一个八位字节为 02 的精彩观点:
myserver% perl -e 'for ($i=0;$i<5;$i++){@m[$i]=int(rand(256));} printf "02:%X:%X:%X:%X:%X\n",@m;'
02:8E:94:A3:47:26