Python 2.5 incluye una implementación uuid que (al menos en una versión) necesita la dirección mac. Puede importar la función de búsqueda de Mac en su propio código fácilmente:
from uuid import getnode as get_mac
mac = get_mac()
El valor de retorno es la dirección mac como un entero de 48 bits.
La solución de Python puro para este problema en Linux para obtener el MAC para una interfaz local específica, publicada originalmente como un comentario de vishnubob y mejorada por Ben Mackey en esta receta de estado activo
#!/usr/bin/python
import fcntl, socket, struct
def getHwAddr(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', ifname[:15]))
return ':'.join(['%02x' % ord(char) for char in info[18:24]])
print getHwAddr('eth0')
Este es el código compatible con Python 3:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import fcntl
import socket
import struct
def getHwAddr(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', bytes(ifname, 'utf-8')[:15]))
return ':'.join('%02x' % b for b in info[18:24])
def main():
print(getHwAddr('enp0s8'))
if __name__ == "__main__":
main()