def get_adapters(): addr0 = addr = ctypes.POINTER(ifaddrs)() retval = libc.getifaddrs(ctypes.byref(addr)) if retval != 0: eno = ctypes.get_errno() raise OSError(eno, os.strerror(eno)) ips = collections.OrderedDict() def add_ip(adapter_name, ip): if not adapter_name in ips: ips[adapter_name] = shared.Adapter(adapter_name, adapter_name, []) ips[adapter_name].ips.append(ip) while addr: name = addr[0].ifa_name ip = shared.sockaddr_to_ip(addr[0].ifa_addr) if ip: if addr[0].ifa_netmask and not addr[0].ifa_netmask[0].sa_familiy: addr[0].ifa_netmask[0].sa_familiy = addr[0].ifa_addr[0].sa_familiy netmask = shared.sockaddr_to_ip(addr[0].ifa_netmask) if isinstance(netmask, tuple): netmask = netmask[0] prefixlen = shared.ipv6_prefixlength(ipaddress.IPv6Address(unicode(netmask))) else: prefixlen = ipaddress.IPv4Network(unicode('0.0.0.0/' + netmask)).prefixlen ip = shared.IP(ip, prefixlen, name) add_ip(name, ip) addr = addr[0].ifa_next libc.freeifaddrs(addr0) return ips.values()
def get_adapters(): addr = ctypes.POINTER(ifaddrs)() retval = libc.getifaddrs(ctypes.byref(addr)) if retval != 0: eno = ctypes.get_errno() raise OSError(eno, os.strerror(eno)) ips = collections.OrderedDict() def add_ip(adapter_name, ip): if not adapter_name in ips: ips[adapter_name] = shared.Adapter(adapter_name, adapter_name, []) ips[adapter_name].ips.append(ip) while addr: name = addr[0].ifa_name ip = shared.sockaddr_to_ip(addr[0].ifa_addr) if ip: netmask = shared.sockaddr_to_ip(addr[0].ifa_netmask) if isinstance(netmask, tuple): netmask = netmask[0] prefixlen = shared.ipv6_prefixlength( ipaddress.IPv6Address(unicode(netmask))) else: prefixlen = ipaddress.IPv4Network(unicode('0.0.0.0/' + netmask)).prefixlen ip = shared.IP(ip, prefixlen, name) add_ip(name, ip) addr = addr[0].ifa_next return ips.values()
def get_adapters(include_unconfigured=False): addr0 = addr = ctypes.POINTER(ifaddrs)() retval = libc.getifaddrs(ctypes.byref(addr)) if retval != 0: eno = ctypes.get_errno() raise OSError(eno, os.strerror(eno)) ips = collections.OrderedDict() def add_ip(adapter_name, ip): if not adapter_name in ips: try: index = socket.if_nametoindex(adapter_name) except (OSError, AttributeError): index = None ips[adapter_name] = shared.Adapter(adapter_name, adapter_name, [], index=index) if ip is not None: ips[adapter_name].ips.append(ip) while addr: name = addr[0].ifa_name if sys.version_info[0] > 2: name = name.decode(encoding='UTF-8') ip = shared.sockaddr_to_ip(addr[0].ifa_addr) if ip: if addr[0].ifa_netmask and not addr[0].ifa_netmask[0].sa_familiy: addr[0].ifa_netmask[0].sa_familiy = addr[0].ifa_addr[ 0].sa_familiy netmask = shared.sockaddr_to_ip(addr[0].ifa_netmask) if isinstance(netmask, tuple): netmask = netmask[0] if sys.version_info[0] > 2: netmaskStr = str(netmask) else: netmaskStr = unicode(netmask) prefixlen = shared.ipv6_prefixlength( ipaddress.IPv6Address(netmaskStr)) else: if sys.version_info[0] > 2: netmaskStr = str('0.0.0.0/' + netmask) else: netmaskStr = unicode('0.0.0.0/' + netmask) prefixlen = ipaddress.IPv4Network(netmaskStr).prefixlen ip = shared.IP(ip, prefixlen, name) add_ip(name, ip) else: if include_unconfigured: add_ip(name, None) addr = addr[0].ifa_next libc.freeifaddrs(addr0) return ips.values()
def enumerate_interfaces_of_adapter(nice_name, address): # Iterate through linked list and fill list addresses = [] while True: addresses.append(address) if not address.Next: break address = address.Next[0] for address in addresses: ip = shared.sockaddr_to_ip(address.Address.lpSockaddr) network_prefix = address.OnLinkPrefixLength yield shared.IP(ip, network_prefix, nice_name)
def enumerate_interfaces_of_adapter( nice_name: str, address: IP_ADAPTER_UNICAST_ADDRESS) -> Iterable[shared.IP]: # Iterate through linked list and fill list addresses = [] # type: List[IP_ADAPTER_UNICAST_ADDRESS] while True: addresses.append(address) if not address.Next: break address = address.Next[0] for address in addresses: ip = shared.sockaddr_to_ip(address.Address.lpSockaddr) network_prefix = address.OnLinkPrefixLength yield shared.IP(ip, network_prefix, nice_name)