Issue #22902: The "ip" command is now used on Linux to determine MAC address

in uuid.getnode().  Pach by Bruno Cauet.
This commit is contained in:
Serhiy Storchaka 2014-11-30 20:39:04 +02:00
parent 16e802f4ae
commit ac4aa7b6aa
4 changed files with 19 additions and 2 deletions

View File

@ -320,6 +320,12 @@ class TestUUID(unittest.TestCase):
if node is not None:
self.check_node(node, 'ifconfig')
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_ip_getnode(self):
node = uuid._ip_getnode()
if node is not None:
self.check_node(node, 'ip')
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_arp_getnode(self):
node = uuid._arp_getnode()

View File

@ -356,6 +356,13 @@ def _ifconfig_getnode():
if mac:
return mac
def _ip_getnode():
"""Get the hardware address on Unix by running ip."""
# This works on Linux with iproute2.
mac = _find_mac('ip', 'link list', [b'link/ether'], lambda i: i+1)
if mac:
return mac
def _arp_getnode():
"""Get the hardware address on Unix by running arp."""
import os, socket
@ -538,8 +545,8 @@ def getnode():
if sys.platform == 'win32':
getters = [_windll_getnode, _netbios_getnode, _ipconfig_getnode]
else:
getters = [_unixdll_getnode, _ifconfig_getnode, _arp_getnode,
_lanscan_getnode, _netstat_getnode]
getters = [_unixdll_getnode, _ifconfig_getnode, _ip_getnode,
_arp_getnode, _lanscan_getnode, _netstat_getnode]
for getter in getters + [_random_getnode]:
try:

View File

@ -217,6 +217,7 @@ Pierre Carrier
Terry Carroll
Edward Catmur
Lorenzo M. Catucci
Bruno Cauet
Donn Cave
Charles Cazabon
Jesús Cea Avión

View File

@ -191,6 +191,9 @@ Core and Builtins
Library
-------
- Issue #22902: The "ip" command is now used on Linux to determine MAC address
in uuid.getnode(). Pach by Bruno Cauet.
- Issue #22960: Add a context argument to xmlrpclib.ServerProxy constructor.
- Issue #22389: Add contextlib.redirect_stderr().