9
votes

Générateur d'adresse MAC en Python

Pour créer des machines virtuelles en vrac, je dois créer un générateur d'adresses MAC aléatoire dans Python. Je ne sais pas comment générer des adresses MAC aléatoires.

est le programme suivant correct ou non? P>

import random

# The first line is defined for specified vendor
mac = [ 0x00, 0x24, 0x81,
    random.randint(0x00, 0x7f),
    random.randint(0x00, 0xff),
    random.randint(0x00, 0xff) ]

print ':'.join(map(lambda x: "%02x" % x, mac))


6 commentaires

Essayez-vous de générer Adresses MAC spécifiquement?


Oui Fabrication spécifique


Cet exemple de programme convient à une seule adresse MAC, mais il exécute le risque très réel que vous générerez des adresses MAC identiques pour plusieurs machines, ce qui pourrait entraîner des problèmes de mise en réseau étranges.


Comment résoudre le problème ci-dessus


Incidemment, vous devriez Choisissez un numéro qui n'est pas encore alloué .


@Deepakgeorge, utilisez-vous VMware, si oui ... Soyez spécifique sur le produit VMware que vous utilisez. VMware s'enroule comment vous construisez la macadérèse spécifique


4 Réponses :


1
votes

Puisque l'unicité est tout ce que vous devriez vous soucier (au-delà de la formulation de l'adresse bien formée), je m'inquiéterais des MSB dans l'OUI et utilisez une séquence dans les octets spécifiques nic. La distribution des adresses est probablement sans importance de votre application (même si certaines implémentations de carte réseau ou de commutation pourraient les utiliser comme une contribution à un hachage, ce n'est probablement pas une grande préoccupation).

vous mai veux envisager d'utiliser "" localement administré " Drapeau dans l'OUI pour éviter un conflit avec un fabricant d'appareils existant.

Évitez les pièges comme régler le bit de multidiffusion (votre exemple fait).


0 commentaires

0
votes

Pour éviter les doublons:

Si vous allez générer beaucoup (des millions) de telles adresses MAC, vous voudrez peut-être générer une liste dans les commandes de Mac, de l'alimenter à un processus de randomisation linéaire (GNU Sort -R devrait faire fonctionner - i Ne pensez pas que cela soit en temps linéaire, mais il a un résultat final similaire) une fois, puis tirez vos nouvelles adresses sur une extrémité de la liste randomisée si nécessaire. Je crois qu'une telle liste devrait correspondre à environ 34 mégaoctets.

Si vous avez simplement besoin de milliers, vous ferez probablement mieux de conserver un fichier texte avec des valeurs déjà sélectionnées et de rechercher des collisions contre cela, en ajoutant de nouvelles valeurs à votre guise. Il s'agit d'un algorithme plus lent Asympotiquement, mais il a beaucoup moins de frais généraux, il devrait donc toujours être une victoire pour un nombre inférieur d'adresses MAC.

BTW, le 4ème octet (numéroté à partir de 1 à partir de la gauche), soit 0-FF au lieu de 0-7F? Je ne vois aucune occurrence de 7f ou 127 dans la page Wikipedia sur les adresses MAC: http://fr.wikipedia.org/wiki/mac_address


0 commentaires

4
votes

modifié de Code de Mamofish à Python3: Xxx

génère des adresses MAC en tant que chaînes de 00: 00: 00: 00: 00: 00 à 00: 00: 00: ff: ff: ff .


0 commentaires

10
votes

Pour que quiconque souhaitant générer ses propres adresses MAC (un bon exemple est pour VM NICS), vous voulez probablement simplement cela:

printf '02:00:00:%02X:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256))


0 commentaires