summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-11-30 18:39:04 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-11-30 18:39:04 (GMT)
commitac4aa7b6aad76b404ed1e695b3130988d87fb39f (patch)
treeed6e8286e1a33dc271169fbcd42101544b4143fa
parent16e802f4aed9db71a2e25fa25daa8fed0fc2e539 (diff)
downloadcpython-ac4aa7b6aad76b404ed1e695b3130988d87fb39f.zip
cpython-ac4aa7b6aad76b404ed1e695b3130988d87fb39f.tar.gz
cpython-ac4aa7b6aad76b404ed1e695b3130988d87fb39f.tar.bz2
Issue #22902: The "ip" command is now used on Linux to determine MAC address
in uuid.getnode(). Pach by Bruno Cauet.
-rw-r--r--Lib/test/test_uuid.py6
-rw-r--r--Lib/uuid.py11
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
4 files changed, 19 insertions, 2 deletions
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index bfa9f97..bc83de2 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -321,6 +321,12 @@ class TestUUID(unittest.TestCase):
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()
if node is not None:
diff --git a/Lib/uuid.py b/Lib/uuid.py
index 9c2a971..7b0b413 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -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:
diff --git a/Misc/ACKS b/Misc/ACKS
index 3d4094c..eae72c7 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -217,6 +217,7 @@ Pierre Carrier
Terry Carroll
Edward Catmur
Lorenzo M. Catucci
+Bruno Cauet
Donn Cave
Charles Cazabon
Jesús Cea Avión
diff --git a/Misc/NEWS b/Misc/NEWS
index 7e568c6..8fb14e0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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().