from operator import itemgetter
def get_mac(interface: str) -> str:
"""
Get MAC Address of network interface.
"""
try:
with open(f"/sys/class/net/{interface}/address") as fd:
return fd.read().strip()
except FileNotFoundError as err:
raise ValueError(f"Interface '{interface}' not found.") from None
def get_ips(interface: str) -> list[str]:
with open("/proc/net/route") as fd:
lines = fd.readlines()
select = itemgetter(1, 7)
to_hex = lambda x: int(x, 16)
addrs = []
for line in lines:
if line.startswith(interface):
data = line.split()
if not all(map(to_hex, select(data))):
continue
value = int(data[1], 16)
ip_blocks = [str((value >> shift) & 0xFF) for shift in range(0, 32, 8)]
addrs.append(".".join(ip_blocks))
return addrs
def get_ips6(interface: str) -> list[str]:
with open("/proc/net/if_inet6") as fd:
lines = fd.readlines()
addrs = []
for line in lines:
ip6, *_, name = line.split()
if name != interface:
continue
ip6 = int(ip6, 16)
bit_shifter = range(112, -1, -16)
ip_blocks = [f"{(ip6 >> shift) & 0xFFFF:04x}" for shift in bit_shifter]
addrs.append(":".join(ip_blocks))
return addrs
mac, ips4, ips6 = get_mac("wlan0"), get_ips("wlan0"), get_ips6("wlan0")
Comments
0 B
|👍
/👎