Solution 1 :
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 basée sur le FQDN de la machine, ce que je trouve parfois utile. Le 02
pour le premier octet, il suffit de définir le bit "attribué localement", ce qui indique clairement qu'il ne s'agit pas d'une adresse MAC fournie par le fournisseur et garantit que vous n'entrerez pas en collision avec l'adresse MAC d'une véritable carte réseau.
Si vous avez besoin de générer plusieurs adresses MAC par hôte, j'avais l'habitude de concaténer le FQDN avec le nom du pont auquel connecter l'interface ; cela a fait du bon travail pour répartir les choses pour différentes cartes réseau.
Solution 2 :
Les scripts postés sont bons, mais je veux ajouter un avertissement :Attention à l'anniversaire (paradoxe) !
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 aient leur anniversaire le même jour.
Cela dépend de votre scénario, comment vous l'utilisez, mais si vous générez le MACS de manière aléatoire, à environ 1 million, votre chance d'avoir un conflit de numéros mac est de 40 % à 2 millions, elle est déjà de 87 % !
Si vous n'avez besoin que de quelques-uns, c'est correct, mais lorsque vous gérez une batterie de serveurs avec des centaines de serveurs, chacun d'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 !
Solution 3 :
Ces variantes fonctionnent également.
plus longtemps :
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
ou plus court :
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
La consommation de charge des deux variantes est très similaire selon une mesure rapide avec le temps.
Solution 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 vieille tronçonneuse de l'armée suisse roule à nouveau. Et avec la version 0.2, je vole sans vergogne l'excellent point de womble sur le fait que le premier octet est 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
Solution 5 :
Je sais que ce message est ancien, mais pour les futurs visiteurs, si vous voulez une adresse MAC pseudo-aléatoire cryptographiquement sécurisée, sans être limité à 0x02 comme OUI, voici un générateur rapide principalement indépendant de la plate-forme :
$ 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'