本機 MAC 位址產生器

本機 MAC 位址產生器

最近我複製了一個腳本用戶 deltaray為虛擬機器產生隨機本地 MAC 位址。我喜歡這個腳本,因為它是產生 MAC 位址最簡單、最有效的 bash 腳本。

然而,所有可用的私有 MAC 位址都有四個不同的 OUI 八位元組可用使用,我的問題是:

如何隨機化私有 MAC 位址的第一組八位元組,並且不必擔心與另一個虛擬機器發生衝突?

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 位址。這可能不是真的。

答案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 位址。

相關內容