MACアドレスの生成

MACアドレスの生成

次の質問があります。固定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"

おすすめ記事