summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2017-11-04 08:11:20 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2017-11-04 08:11:20 (GMT)
commitec2b2dcdd664d35753e471429872b2d6ff74a644 (patch)
tree5cd2d5cadceb9da2ca77febc5efeb63508e34f32 /Lib
parent8ce98543ef959bb65da2fb57b0d442b3b6e8a087 (diff)
downloadcpython-ec2b2dcdd664d35753e471429872b2d6ff74a644.zip
cpython-ec2b2dcdd664d35753e471429872b2d6ff74a644.tar.gz
cpython-ec2b2dcdd664d35753e471429872b2d6ff74a644.tar.bz2
bpo-9678: Fix determining the MAC address in the uuid module. (GH-4264) (#4269)
* Using ifconfig on NetBSD and OpenBSD. * Using arp on Linux, FreeBSD, NetBSD and OpenBSD. Based on patch by Takayuki Shimizukawa. (cherry picked from commit ee1a9a2b78d5b6bb1a8148fc5fcf365e6d4e9e67)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/uuid.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/Lib/uuid.py b/Lib/uuid.py
index 200c800..20b02da 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -349,8 +349,9 @@ def _find_mac(command, args, hw_identifiers, get_index):
def _ifconfig_getnode():
"""Get the hardware address on Unix by running ifconfig."""
# This works on Linux ('' or '-a'), Tru64 ('-av'), but not all Unixes.
+ keywords = (b'hwaddr', b'ether', b'address:', b'lladdr')
for args in ('', '-a', '-av'):
- mac = _find_mac('ifconfig', args, [b'hwaddr', b'ether'], lambda i: i+1)
+ mac = _find_mac('ifconfig', args, keywords, lambda i: i+1)
if mac:
return mac
@@ -370,7 +371,20 @@ def _arp_getnode():
return None
# Try getting the MAC addr from arp based on our IP address (Solaris).
- return _find_mac('arp', '-an', [os.fsencode(ip_addr)], lambda i: -1)
+ mac = _find_mac('arp', '-an', [os.fsencode(ip_addr)], lambda i: -1)
+ if mac:
+ return mac
+
+ # This works on OpenBSD
+ mac = _find_mac('arp', '-an', [os.fsencode(ip_addr)], lambda i: i+1)
+ if mac:
+ return mac
+
+ # This works on Linux, FreeBSD and NetBSD
+ mac = _find_mac('arp', '-an', [os.fsencode('(%s)' % ip_addr)],
+ lambda i: i+2)
+ if mac:
+ return mac
def _lanscan_getnode():
"""Get the hardware address on Unix by running lanscan."""