本地 MAC 地址生成器

本地 MAC 地址生成器

最近我复制了一个脚本用户 deltaray为虚拟机生成随机本地 MAC 地址。我喜欢这个脚本,因为它是生成 MAC 地址最简单、最有效的 bash 脚本。

然而,所有可用的私有 MAC 地址都有四个不同的 OUI 八位字节可用使用,我的问题是:

如何随机化私有 MAC 地址的第一组八位字节,而不必担心与另一个 VM 发生冲突?

x2-xx-xx-xx-xx-xx 
x6-xx-xx-xx-xx-xx
xA-xx-xx-xx-xx-xx
xE-xx-xx-xx-xx-xx

其中 x2、x6、xA 和 xE 中的“x”是随机的。

我确实修改了 deltaray 的脚本以获取静态私有 MAC 地址,但我希望彻底找到最佳解决方案,而不仅仅是单一的解决方案。

我的模组:

#!/bin/bash
hexchars="0123456789ABCDEF"
mac=$( for i in {1..10} ; do echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; done | sed -e 's/\(..\)/:\1/g' )
echo 02$mac

谢谢

请参阅下面对我的问题的回答。

答案1

VM mac 地址需要随机(实际上是伪随机)的原因是什么?似乎您问的是在重叠之前如何在数字序列中获得保证的最大周期。简单的增量是最明显的,但存在允许的最小/最大范围的最大周期的 CRC。但我认为您不会遇到顺序问题,因此 CRC 是不必要的。

使用最大周期,您只需要担心在包装时虚拟机是否仍然存在。如果发生这种情况(由于虚拟机的生命周期),那么您必须保留正在运行的虚拟机的历史记录,并选择另一个选项,直到您没有触及历史记录。假设您有比可能仍在运行的虚拟机更广泛的可用范围,那么您就不会重叠。不过,您不太可能需要历史记录(如果您使用具有最大周期的序列,如简单增量)..我猜测您的虚拟机的生命周期和数量与您可用的空间有关。

假设除了您自己使用此算法创建的 MAC 地址外,没有其他 MAC 地址需要担心冲突。但事实可能并非如此。

答案2

我想到了。

#!/bin/bash
# This will generate every possible local MAC address available.  Works on any system that can run the bash shell.
localoctet="26AE"
hexchars="0123456789ABCDEF"
local=$( echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; echo -n ${localoctet:$(( $RANDOM % 4 )):1} )
mac=$( for i in {1..10} ; do echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; done | sed -e 's/\(..\)/:\1/g' )
echo $local$mac

这将生成所有可能的本地 MAC 地址。

相关内容