bpo-32502: Discard 64-bit (and other invalid) hardware addresses (#5254)

This commit is contained in:
Bo Bayles 2018-01-23 19:11:44 -06:00 committed by Barry Warsaw
parent 0bad4d63c6
commit 6b273f7f40
3 changed files with 38 additions and 6 deletions

View file

@ -656,7 +656,12 @@ def _random_getnode():
_node = None
def getnode():
_NODE_GETTERS_WIN32 = [_windll_getnode, _netbios_getnode, _ipconfig_getnode]
_NODE_GETTERS_UNIX = [_unix_getnode, _ifconfig_getnode, _ip_getnode,
_arp_getnode, _lanscan_getnode, _netstat_getnode]
def getnode(*, getters=None):
"""Get the hardware address as a 48-bit positive integer.
The first time this runs, it may launch a separate program, which could
@ -669,19 +674,18 @@ def getnode():
return _node
if sys.platform == 'win32':
getters = [_windll_getnode, _netbios_getnode, _ipconfig_getnode]
getters = _NODE_GETTERS_WIN32
else:
getters = [_unix_getnode, _ifconfig_getnode, _ip_getnode,
_arp_getnode, _lanscan_getnode, _netstat_getnode]
getters = _NODE_GETTERS_UNIX
for getter in getters + [_random_getnode]:
try:
_node = getter()
except:
continue
if _node is not None:
if (_node is not None) and (0 <= _node < (1 << 48)):
return _node
assert False, '_random_getnode() returned None'
assert False, '_random_getnode() returned invalid value: {}'.format(_node)
_last_timestamp = None