Soluzione 1:
io uso
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Il vantaggio di questo metodo, rispetto a un numero completamente casuale, è che è possibile riprodurre in modo affidabile l'indirizzo MAC in base all'FQDN della macchina, che a volte trovo utile. Il 02
per il primo ottetto imposta semplicemente il bit "assegnato localmente", il che rende ovvio che non si tratta di un indirizzo MAC fornito dal fornitore e garantisce che non entrerai in collisione con l'indirizzo MAC di una scheda di rete reale.
Se è necessario generare più indirizzi MAC per host, ero solito concatenare l'FQDN con il nome del bridge a cui connettere l'interfaccia; questo ha fatto un buon lavoro nel diffondere le cose per diversi NIC.
Soluzione 2:
Gli script pubblicati sono buoni, ma voglio aggiungere un avvertimento:Attenzione al compleanno (paradosso)!
Deriva dal fatto che anche se hai solo 23 persone, la probabilità è già del 50% che 2 di loro compiano gli anni lo stesso giorno.
Dipende dal tuo scenario come lo usi, ma se generi il MACS in modo casuale, a circa 1 milione la tua possibilità di uno scontro di numeri mac è del 40% a 2 milioni è già dell'87%!
Se te ne servono solo un paio va bene, ma quando mantieni una server farm con centinaia di server, ognuno dei quali ospita decine di macchine virtuali, o se usi i mac come indice in qualche db per la contabilità e ti servono unici fai attenzione !
Soluzione 3:
Anche queste varianti funzionano.
più lungo:
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
o più breve:
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
Il consumo di carico di entrambe le varianti è molto simile in base alla misurazione rapida nel tempo.
Soluzione 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, la vecchia motosega dell'esercito svizzero va di nuovo. E tramite la versione 0.2, sto spudoratamente rubando l'eccellente punto di vista di womble sul fatto che il primo ottetto è 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
Soluzione 5:
So che questo post è vecchio, ma per i futuri visitatori, se desideri un indirizzo MAC pseudocasuale crittograficamente sicuro, senza essere limitato a 0x02 come OUI, ecco un generatore veloce per lo più indipendente dalla piattaforma:
$ 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'