MAC地址生成

MAC地址生成

我有以下问题。我保留了一个固定的 MAC 前缀:

prefix=00:0c:29:51:

然后,我将添加两个八位字节。就像 4a:20 一样,我需要随机生成它。所以我有:

mac=$(awk -v min=1000 -v max=10000 'BEGIN{srand(); print int(min+rand()*(max-min+1))}' | sed -e 's/.\{2\}/&:/g;s/.$//')

最后,

final_mac=00:0c:29:51:$mac
echo $final_mac

然而,这有时会生成重复的 MAC。

80:29
67:51
99:48
87:36
87:36

缓解这种情况的一种方法是循环遍历此文本文件以检查当前生成的 MAC 是否存在。如果是,请重新生成并检查。

我有什么想法可以克服这个解决方法吗?谢谢。

答案1

为什么min=1000max=10000?有 65536 个可能的两个八位字节值,是否有某种原因只使用其中的一部分?

在具有$RANDOM(至少 Bash/ksh93/zsh)的 shell 中,您可以在 shell 中完全执行此操作:

printf "00:0c:29:51:%02x:%02x\n" $(( $RANDOM % 256 )) $(( $RANDOM % 256 )) 

或者,如果您想将生成的地址存储在文件中,然后重试直到获得新的地址,如下所示:

file=./generated_macs
gen() { 
    printf "00:0c:29:51:%02x:%02x\n" $(( $RANDOM % 256 )) $(( $RANDOM % 256)); 
}
while mac=$(gen); grep -q "$mac" "$file" ; do true ; done    
echo "$mac" >> "$file"

答案2

您可以使用 /dev/urandom 来生成它:

end=$( for i in $(seq 1 2); do character=$( tr -dc "0-9A-E" < /dev/urandom | head -c 2); printf ":%s" $character; done); echo "00:0c:29:51"$end

相关内容