#!/usr/bin/env python3

import ipaddress
import sys

def hexstr2int(string):
    return int(string.replace(':', ''), 16)

FIRST_MAC = hexstr2int('02:00:b3:39:79:4d')
FIRST_V4  = ipaddress.ip_address('185.203.112.2')
FIRST_V6 =  "2a0a:e5c0:0:2:400:b3ff:fe39:794d"

V6_NAT64_BASE = ipaddress.ip_address("2a0a:e5c0:0:1:0:1::")

def v4_from_mac(mac):
    """Calculates the IPv4 address from a MAC address.

    mac: string (the colon-separated representation)
    returns: ipaddress.ip_address object with the v4 address
    """
    return FIRST_V4 + (hexstr2int(mac) - FIRST_MAC)

def v4_from_v6(ipv6ip):
    """Calculates the IPv4 address from the IPv4 address

    ipv6ip: the ip
    returns: ipaddress.ip_address object with the v4 address
    """

    return FIRST_V4 + (hexstr2int(ipv6ip) - (hexstr2int(FIRST_V6)))

def v6_from_v4(ipv4):
    v4addr = ipaddress.ip_address(ipv4)
    return V6_NAT64_BASE + int(v4addr)

if __name__ == "__main__":
    first_addr = ipaddress.ip_address(sys.argv[1])
    last_addr = ipaddress.ip_address(sys.argv[2])

    while True:
        addr = first_addr.reverse_pointer
        name = "{}.place5.ungleich.ch".format(str(first_addr).replace(":",""))
        record = "{}. IN PTR {}.".format(addr, name)
        record = "{}. IN AAAA {}".format(name, first_addr)

        print(record)

        if first_addr == last_addr:
            break

        first_addr += 1

    sys.exit(0)

    out = []

    try:
        out.append(v4_from_v6(addr))
    except:
        pass

    try:
        out.append(v6_from_v4(addr))
    except:
        pass


    print("{}".format(out))

# test.ch
# 2a0a:e5c0:0:1:0:1:504a:8a8c
# 80.74.138.140
# 1347062412
#