bundlewrap/bundles/pppd/files/dyndns

60 lines
1.2 KiB
Python

#!/usr/bin/env python3
import logging
from ipaddress import ip_address
from json import loads
from subprocess import check_output
from requests import get
UPDATE_URL = '${url}'
USERNAME = '${username}'
PASSWORD = '${password}'
# <%text>
logging.basicConfig(level=logging.INFO)
LOG = logging.getLogger('DynDNS')
try:
ips = set()
iproute = loads(check_output(['ip', '-json', 'address', 'show', 'scope', 'global']))
for iface in iproute:
if not iface['ifname'].startswith('ppp'):
LOG.debug(f'ignoring {iface["ifname"]}')
continue
LOG.info(f'working on {iface["ifname"]}')
for ip in iface['addr_info']:
try:
addr = ip_address(ip['local'])
LOG.info(f'{iface["ifname"]} has ip {addr.compressed}')
ips.add(addr.compressed)
except Exception:
continue
if ips:
LOG.info('got some addresses!')
break
url = UPDATE_URL.format(
ips=','.join(sorted(ips))
)
LOG.info(url)
r = get(
url,
auth=(
USERNAME,
PASSWORD,
),
)
r.raise_for_status()
except Exception as e:
logging.exception(e)
# </%text>