Wolph

Adding dynamic dns hostnames to Django INTERNAL_IPS

While some of us are blessed with fixed IP addresses, some ISPs don’t offer this option unfortunately. If you’re using the Django INTERNAL_IPS setting to show or hide the debug toolbar this can be a problem.

Luckily the Django settings.py files are pure Python and it’s easy enough to work around this issue with a few lines of code:


import sys

INTERNAL_IPS = [
    # Any fixed internal IPs
]

INTERNAL_HOSTS = [
    # Some dyndns host
    # Some no-ip host
    # etc…

    # For example:
    'wol.ph',
]

# Only enable when running through the runserver command
if 'runserver' in sys.argv:
    import dns.resolver

    resolver = dns.resolver.Resolver()
    # Set the timeout to 1 so we don’t wait too long
    resolver.timeout = 1
    resolver.lifetime = 1

    for host in INTERNAL_HOSTS:
    try:
        # For ipv6 you can use AAAA instead of A here
        ip = resolver.query(host, 'A')[0].address
        INTERNAL_IPS.append(ip)
    except dns.exception.Timeout:
        print('Unable to resolve %r, skipping' % host)

Note that the code above uses dnspython which can be installed through pip.

Exit mobile version