Eri*_*und 31 linux command-line-interface mac-address
如何从 Linux 命令行生成随机 MAC 地址?
我寻找一个只需要 Linux 命令行上常见的标准工具的解决方案。
MAC 地址将用于访客 KVM。
wom*_*ble 50
我用
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Run Code Online (Sandbox Code Playgroud)
这种方法相对于完全随机数的好处是可以根据机器的 FQDN 可靠地重现 MAC 地址,我发现这有时很有用。第02
一个八位字节只设置“本地分配”位,这很明显它不是供应商提供的 MAC 地址,并保证您不会与真实 NIC 的 MAC 地址发生冲突。
如果您需要为每个主机生成多个 MAC 地址,我曾经将 FQDN 与要连接接口的网桥名称连接起来;这很好地为不同的 NIC 传播了东西。
发布的脚本很好,但我想添加一个警告:注意生日(悖论)!
这是因为即使你只有 23 个人,其中 2 个人在同一天过生日的几率已经是 50%。
这取决于您如何使用它的场景,但是如果您随机生成 MACS,那么大约 100 万个 mac 编号冲突的机会为 40%,200 万个已经是 87%!
如果您只需要几个,这没问题,但是当您维护一个包含数百台服务器的服务器群时,每个服务器都托管着数十台虚拟机,或者如果您使用 mac 作为某些数据库中的索引进行簿记,并且您需要唯一的服务器,请小心!
小智 7
我知道这篇文章已经过时了,但对于未来的访问者来说,如果您想要一个加密安全的伪随机 MAC 地址,而不限于 0x02 作为 OUI,这里有一个快速且与平台无关的生成器:
$ printf '%02x' $((0x$(od /dev/urandom -N1 -t x1 -An | cut -c 2-) & 0xFE | 0x02)); od /dev/urandom -N5 -t x1 -An | sed 's/ /:/g'
Run Code Online (Sandbox Code Playgroud)
这些变体也有效。
更长:
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
Run Code Online (Sandbox Code Playgroud)
或更短:
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
Run Code Online (Sandbox Code Playgroud)
根据随时间的快速测量,两种变体的负载消耗非常相似。
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
Run Code Online (Sandbox Code Playgroud)
啊,老瑞士军用电锯又骑了。通过 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40237 次 |
最近记录: |