Comment récupérer l'adresse MAC sur Python

J’ai besoin d’une méthode multiplateforme pour déterminer l’adresse MAC d’un ordinateur au moment de l’exécution. Pour Windows, le module ‹ wmi › peut être utilisé et la seule méthode que j’ai trouvée sous Linux est d’exécuter ifconfig et de lancer une expression régulier. la seule méthode sous Linux que j’ai pu trouver est de lancer ifconfig et d’exécuter une regex sur sa sortie. Je n’aime pas utiliser un package qui ne fonctionne que sur un seul système d’exploitation. ne me semble pas très élégant, sans parler des risques d’erreur.

Est-ce que quelqu’un connaît une méthode multiplateforme (windows et linux) pour obtenir l’adresse MAC ?

Python 2.5 intègre une implémentation uuid qui a besoin de l’adresse mac. Vous pouvez facilement importer la fonction de recherche de l’adresse MAC dans votre propre code :

from uuid import getnode as get_mac
mac = get_mac()

La valeur de retour est l’adresse mac sous la forme d’un entier de 48 bits.

netifaces est un bon module à utiliser pour obtenir l’adresse mac (et d’autres adresses). Il est multiplateforme et est plus logique que l’utilisation de socket ou d’uuid.

import netifaces

netifaces.interfaces()
# ['lo', 'eth0', 'tun2']

netifaces.ifaddresses('eth0')[netifaces.AF_LINK]
# [{'addr': '08:00:27:50:f2:51', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]

Parfois, nous avons plus d’une interface réseau.

Une méthode simple pour trouver l’adresse mac d’une interface spécifique est la suivante :

def getMac(interface):
    try:
        mac = open('/sys/class/net/'+interface+'/address').readline()
    except:
        mac = "00:00:00:00:00:00"
    return mac[0:17]

pour appeler cette méthode est simple

myMAC = getMac("wlan0")

Vous pouvez le faire avec psutil qui est multiplateforme :

import psutil
nics = psutil.net_if_addrs()
print [j.address for j in nics[i] for i in nics if i!="lo" and j.family==17]