Solusi 1:
saya menggunakan
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Keuntungan dari metode ini, dibandingkan angka yang benar-benar acak, adalah memungkinkan untuk mereproduksi alamat MAC dengan andal berdasarkan FQDN mesin, yang terkadang berguna bagi saya. 02
untuk oktet pertama cukup setel bit "ditetapkan secara lokal", yang membuatnya jelas bahwa itu bukan alamat MAC yang disediakan vendor, dan menjamin bahwa Anda tidak akan bertabrakan dengan alamat MAC NIC asli.
Jika Anda perlu membuat beberapa alamat MAC per host, saya biasa menggabungkan FQDN dengan nama jembatan untuk menghubungkan antarmuka; ini melakukan pekerjaan yang baik untuk menyebarkan hal-hal untuk NIC yang berbeda.
Solusi 2:
Skrip yang diposting bagus, tetapi saya ingin menambahkan peringatan:Perhatikan Ulang Tahun (paradoks)!
Itu berasal dari fakta bahwa meskipun Anda hanya memiliki 23 orang, peluangnya sudah 50% bahwa 2 dari mereka berulang tahun pada hari yang sama.
Itu tergantung pada skenario Anda bagaimana Anda menggunakannya, tetapi jika Anda membuat MACS secara acak, dengan sekitar 1 juta peluang Anda untuk bentrok nomor mac adalah 40% pada 2 juta itu sudah 87%!
Jika Anda hanya memerlukan pasangan, ini tidak apa-apa, tetapi ketika Anda memelihara server farm dengan ratusan server, masing-masing menghosting puluhan mesin virtual, atau jika Anda menggunakan mac sebagai indeks di beberapa db untuk pembukuan dan Anda memerlukan keunikan, berhati-hatilah !
Solusi 3:
Varian ini juga berfungsi.
lebih lama:
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
atau lebih singkat:
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
Konsumsi muatan kedua varian sangat mirip menurut pengukuran cepat dengan waktu.
Solusi 4:
myserver% perl -e 'for ($i=0;$i<6;$i++){@m[$i]=int(rand(256));} printf "%X:%X:%X:%X:%X:%X\n",@m;'
55:C2:A5:FA:17:74
Ah, Gergaji Tentara Swiss naik lagi. Dan melalui versi 0.2, tanpa malu-malu saya mencuri poin luar biasa dari womble tentang oktet pertama adalah 02:
myserver% perl -e 'for ($i=0;$i<5;$i++){@m[$i]=int(rand(256));} printf "02:%X:%X:%X:%X:%X\n",@m;'
02:8E:94:A3:47:26
Solusi 5:
Saya tahu posting ini sudah lama, tetapi untuk pengunjung yang akan datang, jika Anda menginginkan alamat MAC pseudorandom yang aman secara kriptografis, tanpa dibatasi pada 0x02 sebagai OUI, berikut adalah generator agnostik platform yang cepat:
$ printf '%02x' $((0x$(od /dev/urandom -N1 -t x1 -An | cut -c 2-) & 0xFE | 0x02)); od /dev/urandom -N5 -t x1 -An | sed 's/ /:/g'