36 lines
908 B
Python
36 lines
908 B
Python
|
# netifaces compatibility layer
|
||
|
|
||
|
import ifaddr
|
||
|
import socket
|
||
|
|
||
|
from typing import List
|
||
|
|
||
|
AF_INET6 = socket.AF_INET6.value
|
||
|
AF_INET = socket.AF_INET.value
|
||
|
|
||
|
def interfaces() -> List[str]:
|
||
|
adapters = ifaddr.get_adapters(include_unconfigured=True)
|
||
|
return [a.name for a in adapters]
|
||
|
|
||
|
def ifaddresses(ifname) -> dict:
|
||
|
adapters = ifaddr.get_adapters(include_unconfigured=True)
|
||
|
ifa = {}
|
||
|
for a in adapters:
|
||
|
if a.name == ifname:
|
||
|
ipv4s = []
|
||
|
ipv6s = []
|
||
|
for ip in a.ips:
|
||
|
t = {}
|
||
|
if ip.is_IPv4:
|
||
|
t["addr"] = ip.ip
|
||
|
ipv4s.append(t)
|
||
|
if ip.is_IPv6:
|
||
|
t["addr"] = ip.ip[0]
|
||
|
ipv6s.append(t)
|
||
|
|
||
|
if len(ipv4s) > 0:
|
||
|
ifa[AF_INET] = ipv4s
|
||
|
if len(ipv6s) > 0:
|
||
|
ifa[AF_INET6] = ipv6s
|
||
|
|
||
|
return ifa
|