我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用netifaces.AF_INET6。
def __init__(self, data # Data suitable for this class ): valid, message = data_is_valid(data) if not valid: raise ValueError("Invalid data: %s" % message) self.cidrs = [] for iface in netifaces.interfaces(): ifaddrs = netifaces.ifaddresses(iface) if netifaces.AF_INET in ifaddrs: for ifaddr in ifaddrs[netifaces.AF_INET]: if 'addr' in ifaddr: self.cidrs.append(ipaddr.IPNetwork(ifaddr['addr'])) if netifaces.AF_INET6 in ifaddrs: for ifaddr in ifaddrs[netifaces.AF_INET6]: if 'addr' in ifaddr: #add v6 but remove stuff like %eth0 that gets thrown on end of some addrs self.cidrs.append(ipaddr.IPNetwork(ifaddr['addr'].split('%')[0]))
def internal_ip(pl, interface='auto', ipv=4): family = netifaces.AF_INET6 if ipv == 6 else netifaces.AF_INET if interface == 'auto': try: interface = next(iter(sorted(netifaces.interfaces(), key=_interface_key, reverse=True))) except StopIteration: pl.info('No network interfaces found') return None elif interface == 'default_gateway': try: interface = netifaces.gateways()['default'][family][1] except KeyError: pl.info('No default gateway found for IPv{0}', ipv) return None addrs = netifaces.ifaddresses(interface) try: return addrs[family][0]['addr'] except (KeyError, IndexError): pl.info("No IPv{0} address found for interface {1}", ipv, interface) return None
def in6_getifaddr(): """ Returns a list of 3-tuples of the form (addr, scope, iface) where 'addr' is the address of scope 'scope' associated to the interface 'ifcace'. This is the list of all addresses of all interfaces available on the system. """ ret = [] interfaces = get_if_list() for i in interfaces: addrs = netifaces.ifaddresses(i) if netifaces.AF_INET6 not in addrs: continue for a in addrs[netifaces.AF_INET6]: addr = a['addr'].split('%')[0] scope = scapy.utils6.in6_getscope(addr) ret.append((addr, scope, i)) return ret
def in6_getifaddr(): err = create_string_buffer(PCAP_ERRBUF_SIZE) devs = POINTER(pcap_if_t)() ret = [] if pcap_findalldevs(byref(devs), err) < 0: return ret try: p = devs ret = [] while p: a = p.contents.addresses while a: if a.contents.addr.contents.sa_family == socket.AF_INET6: ap = a.contents.addr val = cast(ap, POINTER(sockaddr_in6)) addr = socket.inet_ntop(socket.AF_INET6, bytes(val.contents.sin6_addr[:])) scope = scapy.utils6.in6_getscope(addr) ret.append((addr, scope, p.contents.name.decode('ascii'))) a = a.contents.next p = p.contents.next return ret finally: pcap_freealldevs(devs)
def get_ipv6_network_address(iface): # Behave in same way as ipv4 get_network_address() above if iface is None. if not iface: return None try: ipv6_addr = utils.get_ipv6_addr(iface=iface)[0] all_addrs = netifaces.ifaddresses(iface) for addr in all_addrs[netifaces.AF_INET6]: if ipv6_addr == addr['addr']: network = "{}/{}".format(addr['addr'], addr['netmask']) return str(IPNetwork(network).network) except ValueError: msg = "Invalid interface '%s'" % iface status_set('blocked', msg) raise Exception(msg) msg = "No valid network found for interface '%s'" % iface status_set('blocked', msg) raise Exception(msg)
def get_default_gateway_ip(): """Return the default gateway IP.""" gateways = netifaces.gateways() defaults = gateways.get('default') if not defaults: return def default_ip(family): gw_info = defaults.get(family) if not gw_info: return addresses = netifaces.ifaddresses(gw_info[1]).get(family) if addresses: return addresses[0]['addr'] return default_ip(netifaces.AF_INET) or default_ip(netifaces.AF_INET6)
def test_get_default_gateway_ip_returns_ipv4_over_ipv6(self): gw4_address = factory.make_ipv4_address() gw6_address = factory.make_ipv6_address() ipv4_address = factory.make_ipv4_address() ipv6_address = factory.make_ipv6_address() iface = factory.make_name('eth') self.patch(netifaces, 'gateways').return_value = { 'default': { netifaces.AF_INET: (gw4_address, iface), netifaces.AF_INET6: (gw6_address, iface), } } self.patch(netifaces, 'ifaddresses').return_value = { netifaces.AF_INET: [{'addr': ipv4_address}], netifaces.AF_INET6: [{'addr': ipv6_address}], } self.assertEqual(ipv4_address, snappy.get_default_gateway_ip())
def get_all_addresses_for_interface(interface: str) -> Iterable[str]: """Yield all IPv4 and IPv6 addresses for an interface as `IPAddress`es. IPv4 addresses will be yielded first, followed by IPv6 addresses. :param interface: The name of the interface whose addresses we should retrieve. """ addresses = netifaces.ifaddresses(interface) if netifaces.AF_INET in addresses: for inet_address in addresses[netifaces.AF_INET]: if "addr" in inet_address: yield inet_address["addr"] if netifaces.AF_INET6 in addresses: for inet6_address in addresses[netifaces.AF_INET6]: if "addr" in inet6_address: # We know the interface name, so we don't care to keep the # interface name on link-local addresses. Strip those off # here. yield clean_up_netifaces_address( inet6_address["addr"], interface)
def get_machine_ips(): """Get the machine's ip addresses :returns: list of Strings of ip addresses """ addresses = [] for interface in netifaces.interfaces(): try: iface_data = netifaces.ifaddresses(interface) for family in iface_data: if family not in (netifaces.AF_INET, netifaces.AF_INET6): continue for address in iface_data[family]: addr = address['addr'] # If we have an ipv6 address remove the # %ether_interface at the end if family == netifaces.AF_INET6: addr = addr.split('%')[0] addresses.append(addr) except ValueError: pass return addresses
def _get_for_address(address, key): """Retrieve an attribute of or the physical interface that the IP address provided could be bound to. :param address (str): An individual IPv4 or IPv6 address without a net mask or subnet prefix. For example, '192.168.1.1'. :param key: 'iface' for the physical interface name or an attribute of the configured interface, for example 'netmask'. :returns str: Requested attribute or None if address is not bindable. """ address = netaddr.IPAddress(address) for iface in netifaces.interfaces(): addresses = netifaces.ifaddresses(iface) if address.version == 4 and netifaces.AF_INET in addresses: addr = addresses[netifaces.AF_INET][0]['addr'] netmask = addresses[netifaces.AF_INET][0]['netmask'] network = netaddr.IPNetwork("%s/%s" % (addr, netmask)) cidr = network.cidr if address in cidr: if key == 'iface': return iface else: return addresses[netifaces.AF_INET][0][key] if address.version == 6 and netifaces.AF_INET6 in addresses: for addr in addresses[netifaces.AF_INET6]: if not addr['addr'].startswith('fe80'): network = netaddr.IPNetwork("%s/%s" % (addr['addr'], addr['netmask'])) cidr = network.cidr if address in cidr: if key == 'iface': return iface elif key == 'netmask' and cidr: return str(cidr).split('/')[1] else: return addr[key] return None
def _get_for_address(address, key): """Retrieve an attribute of or the physical interface that the IP address provided could be bound to. :param address (str): An individual IPv4 or IPv6 address without a net mask or subnet prefix. For example, '192.168.1.1'. :param key: 'iface' for the physical interface name or an attribute of the configured interface, for example 'netmask'. :returns str: Requested attribute or None if address is not bindable. """ address = netaddr.IPAddress(address) for iface in netifaces.interfaces(): addresses = netifaces.ifaddresses(iface) if address.version == 4 and netifaces.AF_INET in addresses: addr = addresses[netifaces.AF_INET][0]['addr'] netmask = addresses[netifaces.AF_INET][0]['netmask'] network = netaddr.IPNetwork("%s/%s" % (addr, netmask)) cidr = network.cidr if address in cidr: if key == 'iface': return iface else: return addresses[netifaces.AF_INET][0][key] if address.version == 6 and netifaces.AF_INET6 in addresses: for addr in addresses[netifaces.AF_INET6]: network = _get_ipv6_network_from_address(addr) if not network: continue cidr = network.cidr if address in cidr: if key == 'iface': return iface elif key == 'netmask' and cidr: return str(cidr).split('/')[1] else: return addr[key] return None
def is_ipv6_present(interface): addr = ni.ifaddresses(interface) return ni.AF_INET6 in addr
def in6_getifaddr(): ret = [] for i in get_if_list(): for a in intf.get(i)['addr6']: addr = socket.inet_ntop(socket.AF_INET6, a) scope = scapy.utils6.in6_getscope(addr) ret.append((addr, scope, i)) return ret
def default_gateway(self): """ Default Interface Gateway Return: tuple """ gws = netifaces.gateways() try: return gws['default'][netifaces.AF_INET] except KeyError: return gws['default'][netifaces.AF_INET6]
def _ip_local_host(ip_addr): """ This function will iterate over all interfaces on the system and compare their IP addresses with the one given as a parameter :param ip_addr: IP addr :type ip_addr: str :return int """ for intf in netifaces.interfaces(): addr_list_dict = netifaces.ifaddresses(intf) # Some interfaces have no address if addr_list_dict: # Some interfaces have no IPv4 address. if netifaces.AF_INET in addr_list_dict: inet_addr_list = addr_list_dict[netifaces.AF_INET] for value in inet_addr_list: if value['addr'] == ip_addr: return True if netifaces.AF_INET6 in addr_list_dict: inet_addr_list = addr_list_dict[netifaces.AF_INET6] for value in inet_addr_list: if value['addr'] == ip_addr: return True return False
def GetIpAddress(self, interface): ip_addr = None try: from netifaces import AF_INET, AF_INET6, ifaddresses ip_addr = ifaddresses(interface)[AF_INET][0]['addr'] except: exception('GetIpAddress failed') return ip_addr
def ipv6(self): import netifaces try: addr = next(filter(lambda a: self.__is_valid_address(a), map(lambda addr_string: IPv6Address(addr_string['addr'].split('%', 1)[0]), self.addresses[netifaces.AF_INET6])), None) return addr except (KeyError, StopIteration): raise AddressProviderException("Interface %s has no valid IPv6 address" % self.interface)
def ip_addresses(): ip_list = {} ip_list['v4'] = {} ip_list['v6'] = {} for interface in netifaces.interfaces(): link = netifaces.ifaddresses(interface) if netifaces.AF_INET in link: if interface not in ip_list['v4']: ip_list['v4'][interface] = [] ip_list['v4'][interface].append(link[netifaces.AF_INET]) if netifaces.AF_INET6 in link: if interface not in ip_list['v6']: ip_list['v6'][interface] = [] ip_list['v6'][interface].append(link[netifaces.AF_INET6]) return ip_list