61
61
"""Get an IPv4 or IPv6 address within the network from the host.
63
63
:param network (str): CIDR presentation format. For example,
64
'192.168.1.0/24'. Supports multiple networks as a space-delimited list.
65
65
:param fallback (str): If no address is found, return fallback.
66
66
:param fatal (boolean): If no address is found, fallback is not
67
67
set and fatal is True then exit(1).
78
_validate_cidr(network)
79
network = netaddr.IPNetwork(network)
80
for iface in netifaces.interfaces():
81
addresses = netifaces.ifaddresses(iface)
82
if network.version == 4 and netifaces.AF_INET in addresses:
83
addr = addresses[netifaces.AF_INET][0]['addr']
84
netmask = addresses[netifaces.AF_INET][0]['netmask']
85
cidr = netaddr.IPNetwork("%s/%s" % (addr, netmask))
78
networks = network.split() or [network]
79
for network in networks:
80
_validate_cidr(network)
81
network = netaddr.IPNetwork(network)
82
for iface in netifaces.interfaces():
83
addresses = netifaces.ifaddresses(iface)
84
if network.version == 4 and netifaces.AF_INET in addresses:
85
addr = addresses[netifaces.AF_INET][0]['addr']
86
netmask = addresses[netifaces.AF_INET][0]['netmask']
87
cidr = netaddr.IPNetwork("%s/%s" % (addr, netmask))
89
if network.version == 6 and netifaces.AF_INET6 in addresses:
90
for addr in addresses[netifaces.AF_INET6]:
91
if not addr['addr'].startswith('fe80'):
92
cidr = netaddr.IPNetwork("%s/%s" % (addr['addr'],
91
if network.version == 6 and netifaces.AF_INET6 in addresses:
92
for addr in addresses[netifaces.AF_INET6]:
93
if not addr['addr'].startswith('fe80'):
94
cidr = netaddr.IPNetwork("%s/%s" % (addr['addr'],
97
99
if fallback is not None: