diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2017-11-04 08:11:20 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-11-04 08:11:20 (GMT) |
commit | ec2b2dcdd664d35753e471429872b2d6ff74a644 (patch) | |
tree | 5cd2d5cadceb9da2ca77febc5efeb63508e34f32 /Lib | |
parent | 8ce98543ef959bb65da2fb57b0d442b3b6e8a087 (diff) | |
download | cpython-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.py | 18 |
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.""" |