2022-07-05 08:14:37 +03:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
"""Network utils"""
|
|
|
|
import subprocess
|
|
|
|
import re
|
2024-03-01 14:58:28 +03:00
|
|
|
import ipaddress
|
2022-08-25 20:03:56 +03:00
|
|
|
from typing import Optional
|
2022-07-05 08:14:37 +03:00
|
|
|
|
2022-07-07 15:53:19 +02:00
|
|
|
|
2022-08-25 20:03:56 +03:00
|
|
|
def get_ip4() -> str:
|
2022-07-05 08:14:37 +03:00
|
|
|
"""Get IPv4 address"""
|
|
|
|
try:
|
2022-07-07 15:53:19 +02:00
|
|
|
ip4 = subprocess.check_output(["ip", "addr", "show", "dev", "eth0"]).decode(
|
|
|
|
"utf-8"
|
|
|
|
)
|
2022-07-05 08:14:37 +03:00
|
|
|
ip4 = re.search(r"inet (\d+\.\d+\.\d+\.\d+)\/\d+", ip4)
|
|
|
|
except subprocess.CalledProcessError:
|
|
|
|
ip4 = None
|
2022-08-25 20:03:56 +03:00
|
|
|
return ip4.group(1) if ip4 else ""
|
2022-07-05 08:14:37 +03:00
|
|
|
|
2022-07-07 15:53:19 +02:00
|
|
|
|
2024-03-01 03:21:31 +03:00
|
|
|
def get_ip6() -> Optional[str]:
|
2022-07-05 08:14:37 +03:00
|
|
|
"""Get IPv6 address"""
|
|
|
|
try:
|
2024-03-04 00:45:45 +03:00
|
|
|
ip6_addresses = subprocess.check_output(
|
|
|
|
["ip", "addr", "show", "dev", "eth0"]
|
|
|
|
).decode("utf-8")
|
2024-03-01 15:06:32 +03:00
|
|
|
ip6_addresses = re.findall(r"inet6 (\S+)\/\d+", ip6_addresses)
|
|
|
|
for address in ip6_addresses:
|
2024-03-01 14:58:28 +03:00
|
|
|
if ipaddress.IPv6Address(address).is_global:
|
|
|
|
return address
|
2022-07-05 08:14:37 +03:00
|
|
|
except subprocess.CalledProcessError:
|
2024-03-01 14:58:28 +03:00
|
|
|
return None
|