Issue #22902: The "ip" command is now used on Linux to determine MAC address
in uuid.getnode().  Pach by Bruno Cauet.
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 @@
             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 @@
         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 @@
     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 @@
 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 @@
 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().