Bagaimana cara menghasilkan alamat MAC acak dari baris perintah Linux?
Saya mencari solusi yang hanya membutuhkan alat standar yang biasa ditemukan di baris perintah Linux.
Alamat MAC akan digunakan untuk KVM tamu.
sumber
Bagaimana cara menghasilkan alamat MAC acak dari baris perintah Linux?
Saya mencari solusi yang hanya membutuhkan alat standar yang biasa ditemukan di baris perintah Linux.
Alamat MAC akan digunakan untuk KVM tamu.
saya menggunakan
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Manfaat dari metode ini, lebih dari angka acak, adalah mungkin untuk mereproduksi alamat MAC dengan andal berdasarkan FQDN mesin, yang kadang-kadang bermanfaat bagi saya. Untuk 02
oktet pertama hanya menetapkan bit "yang ditentukan secara lokal", yang membuatnya jelas bahwa itu bukan alamat MAC yang disediakan vendor, dan menjamin bahwa Anda tidak akan bertabrakan dengan alamat MAC NIC yang sebenarnya.
Jika Anda perlu membuat beberapa alamat MAC per host, saya biasa menggabungkan FQDN dengan nama jembatan untuk menghubungkan antarmuka ke; ini melakukan pekerjaan yang baik untuk menyebarkan berbagai hal untuk NIC yang berbeda.
tr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
Skrip yang diposting bagus, tapi saya ingin menambahkan peringatan: Mind the Birthday (paradoxon)!
Itu berasal dari fakta bahwa bahkan jika Anda hanya memiliki 23 orang, kesempatannya sudah 50% bahwa 2 dari mereka ulang tahun pada hari yang sama.
Itu tergantung pada skenario Anda bagaimana Anda menggunakannya, tetapi jika Anda menghasilkan MACS secara acak, sekitar 1 juta peluang Anda untuk bentrokan nomor mac adalah 40% pada 2 juta itu sudah 87%!
Jika Anda hanya membutuhkan pasangan ini tidak apa-apa, tetapi ketika Anda mengelola server pertanian dengan ratusan server, masing-masing dari mereka hosting puluhan mesin virtual, atau jika Anda menggunakan mac sebagai indeks dalam beberapa db untuk pembukuan dan Anda perlu unik hati-hati !
sumber
Ah, Gergaji Tentara Swiss itu naik lagi. Dan dengan versi 0.2, saya tanpa malu-malu mencuri poin womble yang sangat baik tentang oktet pertama menjadi 02:
sumber
Varian ini juga berfungsi.
lebih lama:
atau lebih pendek:
Konsumsi beban kedua varian sangat mirip menurut pengukuran cepat dengan waktu.
sumber
fold -w2|paste -sd: -
alih-alihsed
. Thesed
solusi adalah mungkin lebih mudah untuk diingat karena menggunakan alat yang lebih akrab - meskipun aku belajar lebih banyak dari jawaban / nya.ec
11101100 dalam biner ...Saya tahu posting ini sudah tua, tetapi untuk pengunjung di masa depan, jika Anda ingin alamat MAC pseudorandom aman secara cryptographically aman, tanpa terbatas pada 0x02 sebagai OUI, berikut adalah generator agnostik platform cepat:
sumber
Ini satu lagi, berdasarkan jawaban wombie:
sumber
Berikut adalah lima opsi lain, yang semuanya menggunakan bit acak untuk bit paling signifikan dari byte paling signifikan yang menunjukkan apakah alamatnya unicast atau multicast dan untuk bit paling tidak signifikan kedua dari byte paling signifikan yang menunjukkan apakah alamatnya adalah dikelola secara universal atau lokal.
jot
hadir dengan OS X dan BSD tetapi tidak dengan sebagian besar distribusi Linux. Dalamjot
-w
mengubah format,-s
mengubah pemisah, dan-r
menghasilkan angka acak.od
dalam POSIX tetapihexdump
tidak.OS X
od
(di/usr/bin/od
bawah) menggunakan format output yang berbeda dari GNUod
:Dalam OS X
od
Pilihan ditempatkan setelah argumen untuk file input diperlakukan sebagai nama-nama file input, sehingga perintah dalam jawaban oleh Aaron Toponce membaca dari/dev/urandom
tanpa batas dengan OS Xod
.sumber
Anda bisa saja menambahkan $ ACAK setelah $ FQDN dan ini akan memberi Anda alamat mac acak setiap kali Anda menjalankannya. Ini sangat membantu untuk poeple yang ingin membuat backup vms menggunakan snapshot atau klon vms.
sumber
Saya menggunakan:
sumber
Python one-liner:
sumber
Hanya untuk bersenang-senang, di sini adalah versi bash murni, diuji terhadap Bash 4.4.12 (1) - rilis:
Baris pertama membaca 6 karakter dari
/dev/urandom
; kemudian menggunakan set karakter C cetak nilai hex diisi 0 dari setiap karakter yang dipisahkan dengan titik dua (baris baru opsional tetapi berguna untuk mencetak nilai).Mengekstraksi nilai karakter menggunakan printf didefinisikan dalam dokumentasi POSIX printf :
sumber