
次の質問があります。固定MACプレフィックスを保持しました。
prefix=00:0c:29:51:
次に、2つのオクテットを追加します。 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
これを軽減する1つの方法は、このテキストファイルを繰り返して、現在生成されたMACが存在することを確認することです。その場合は、再生成してご確認ください。
この回避策を克服する方法についてのアイデアはありますか?ありがとうございます。
答え1
なぜmin=1000
そしてmax=10000
? 65536個の可能な2つのオクテット値があります。そのうちの一部だけが使用される理由はありますか?
$RANDOM
(少なくともBash / ksh93 / zsh)シェルでは、これをシェルで正確に実行できます。
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