diff --git a/reverse.py b/reverse.py new file mode 100644 index 0000000..a7461f9 --- /dev/null +++ b/reverse.py @@ -0,0 +1,44 @@ +import ipaddress + +def reverse_zone(network): + """Reverse a network zone""" + + if network.version == 4: + boundary = 8 # break to the byte + elif network.version == 6: + boundary = 4 # break to the nimble + + assert network.prefixlen % boundary == 0 + length = (network.prefixlen // boundary) + + full_network_reverse = network.network_address.reverse_pointer + + splitted = full_network_reverse.split(".") + splitting_len = int(network.max_prefixlen / boundary) + splitted = splitted[splitting_len - length:] + + reversed_zone = ".".join(splitted) + + return reversed_zone + + +net1 = ipaddress.IPv4Network("10.128.12.0/24") +net2 = ipaddress.IPv4Network("10.129.0.0/16") +net3 = ipaddress.IPv4Network("10.0.0.0/8") + +net4 = ipaddress.IPv6Network("2001:470:142:3::/64") +net5 = ipaddress.IPv6Network("2001:470:142::/48") +net6 = ipaddress.IPv6Network("2a09:6840::/32") + +#>>> reverse_zone(net1) +#'12.128.10.in-addr.arpa' +#>>> reverse_zone(net2) +#'129.10.in-addr.arpa' +#>>> reverse_zone(net3) +#'10.in-addr.arpa' +#>>> reverse_zone(net4) +#'3.0.0.0.2.4.1.0.0.7.4.0.1.0.0.2.ip6.arpa' +#>>> reverse_zone(net5) +#'2.4.1.0.0.7.4.0.1.0.0.2.ip6.arpa' +#>>> reverse_zone(net6) +#'0.4.8.6.9.0.a.2.ip6.arpa'