Try to find the MAC addr on various flavours of Unix. This seems hopeless.
The reduces the test_uuid failures, but there's still another method failing.
This commit is contained in:
parent
750c4420a8
commit
46fc6a08f6
36
Lib/uuid.py
36
Lib/uuid.py
|
@ -271,22 +271,48 @@ class UUID(object):
|
||||||
|
|
||||||
version = property(get_version)
|
version = property(get_version)
|
||||||
|
|
||||||
def _ifconfig_getnode():
|
def _find_mac(command, args, hw_identifiers, get_index):
|
||||||
"""Get the hardware address on Unix by running ifconfig."""
|
|
||||||
import os
|
import os
|
||||||
for dir in ['', '/sbin/', '/usr/sbin']:
|
for dir in ['', '/sbin/', '/usr/sbin']:
|
||||||
try:
|
try:
|
||||||
# LC_ALL to get English output, 2>/dev/null to
|
# LC_ALL to get English output, 2>/dev/null to
|
||||||
# prevent output on stderr
|
# prevent output on stderr
|
||||||
cmd = 'LC_ALL=C %s 2>/dev/null' % os.path.join(dir, 'ifconfig')
|
executable = os.path.join(dir, command)
|
||||||
|
cmd = 'LC_ALL=C %s %s 2>/dev/null' % (executable, args)
|
||||||
pipe = os.popen(cmd)
|
pipe = os.popen(cmd)
|
||||||
except IOError:
|
except IOError:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for line in pipe:
|
for line in pipe:
|
||||||
words = line.lower().split()
|
words = line.lower().split()
|
||||||
for i in range(len(words)):
|
for i in range(len(words)):
|
||||||
if words[i] in ['hwaddr', 'ether']:
|
if words[i] in hw_identifiers:
|
||||||
return int(words[i + 1].replace(':', ''), 16)
|
return int(words[get_index(i)].replace(':', ''), 16)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _ifconfig_getnode():
|
||||||
|
"""Get the hardware address on Unix by running ifconfig."""
|
||||||
|
|
||||||
|
# This works on Linux ('' or '-a'), Tru64 ('-av'), but not all Unixes.
|
||||||
|
for args in ('', '-a', '-av'):
|
||||||
|
mac = _find_mac('ifconfig', args, ['hwaddr', 'ether'], lambda i: i+1)
|
||||||
|
if mac:
|
||||||
|
return mac
|
||||||
|
|
||||||
|
import socket
|
||||||
|
ip_addr = socket.gethostbyname(socket.gethostname())
|
||||||
|
|
||||||
|
# Try getting the MAC addr from arp based on our IP address (Solaris).
|
||||||
|
mac = _find_mac('arp', '-an', [ip_addr], lambda i: -1)
|
||||||
|
if mac:
|
||||||
|
return mac
|
||||||
|
|
||||||
|
# This might work on HP-UX.
|
||||||
|
mac = _find_mac('lanscan', '-ai', ['lan0'], lambda i: 0)
|
||||||
|
if mac:
|
||||||
|
return mac
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
def _ipconfig_getnode():
|
def _ipconfig_getnode():
|
||||||
"""Get the hardware address on Windows by running ipconfig.exe."""
|
"""Get the hardware address on Windows by running ipconfig.exe."""
|
||||||
|
|
Loading…
Reference in New Issue