j'utilise
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
L'avantage de cette méthode, par rapport à un nombre complètement aléatoire, est qu'il est possible de reproduire de manière fiable l'adresse MAC en fonction du FQDN de la machine, ce que je trouve parfois utile. Le 02
premier octet positionne simplement le bit "assigné localement", ce qui rend évident qu'il ne s'agit pas d'une adresse MAC fournie par le fournisseur et garantit que vous ne heurterez pas l'adresse MAC réelle d'une carte réseau.
Si vous devez générer plusieurs adresses MAC par hôte, j'ai utilisé pour concaténer le nom de domaine complet avec le nom du pont auquel connecter l'interface; cela a bien réussi à répartir les choses entre les différentes cartes réseau.
tr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
Les scripts publiés sont bons, mais je veux ajouter un avertissement: Mind the Birthday (paradoxon)!
Cela vient du fait que même si vous n'avez que 23 personnes, il y a déjà 50% de chances que 2 d'entre elles fêtent leur anniversaire le même jour.
Cela dépend de votre scénario, de la façon dont vous l'utilisez, mais si vous générez le MACS au hasard, à environ 1 million, votre chance pour un conflit de numéros mac est de 40% à 2 millions, c'est déjà 87%!
Si vous n'avez besoin que de quelques, c'est correct, mais lorsque vous gérez une batterie de serveurs avec des centaines de serveurs, chacun d'entre eux hébergeant des dizaines de machines virtuelles, ou si vous utilisez les macs comme index dans une base de données pour la comptabilité et que vous avez besoin d'uniques, soyez prudent !
la source
Ah, la vieille tronçonneuse de l'armée suisse chevauche à nouveau. Et par le biais de la version 0.2, je vole sans vergogne l'excellent point de womble sur le premier octet étant 02:
la source
Ces variantes fonctionnent également.
plus long:
ou plus court:
La consommation de charge des deux variantes est très similaire selon une mesure rapide avec le temps.
la source
fold -w2|paste -sd: -
au lieu desed
. Lased
solution est probablement plus facile à retenir car elle utilise un outil plus familier - même si j'ai appris plus de sa réponse.ec
donc 11101100 en binaire ...Je sais que ce message est ancien, mais pour les futurs visiteurs, si vous voulez une adresse MAC pseudo-aléatoire sécurisée cryptographiquement, sans être limitée à 0x02 en tant qu'OUI, voici un générateur agnostique rapide pour la plupart des plateformes:
la source
En voici un autre, basé sur la réponse de wombie:
la source
Voici cinq autres options, qui utilisent toutes des bits aléatoires pour le bit le moins significatif de l'octet le plus significatif qui indique si l'adresse est unicast ou multicast et pour le deuxième bit le moins significatif de l'octet le plus significatif qui indique si l'adresse est universellement ou localement administré.
jot
est livré avec OS X et BSD mais pas avec la plupart des distributions Linux. Dansjot
-w
change le format,-s
change le séparateur et-r
génère des nombres aléatoires.od
est en POSIX maishexdump
ne l'est pas.OS X
od
(/usr/bin/od
ci-dessous) utilise un format de sortie différent de GNUod
:Dans de OS X
od
options placées après un argument pour un fichier d'entrée sont traités comme les noms des fichiers d'entrée, de sorte que la commande dans la réponse par Aaron Toponce lit à partir/dev/urandom
indéfiniment avec OS X deod
.la source
Vous pouvez simplement ajouter un $ RANDOM après $ FQDN et cela vous donnera des adresses mac aléatoires à chaque fois que vous l'exécuterez. Ceci est particulièrement utile pour les personnes qui souhaitent créer des vms de sauvegarde en utilisant des instantanés ou des clones de vms.
la source
J'utilise:
la source
Une doublure en Python:
la source
Juste pour le plaisir, voici une version pure bash, testée contre Bash 4.4.12 (1) -release:
La première ligne lit 6 caractères
/dev/urandom
; puis en utilisant le jeu de caractères C, imprimez la valeur hexadécimale remplie de 0 de chaque caractère séparé par deux points (la nouvelle ligne est facultative mais utile pour imprimer la valeur).L'extraction de la valeur d'un caractère à l'aide de printf est définie dans la documentation POSIX printf :
la source