import ipaddress import argparse # for exit codes import sys def proc_args(): # src https://docs.python.org/3/library/argparse.html#description parser = argparse.ArgumentParser(description='Compare two IPs and check if they are overlapped or not') parser.add_argument('ip1', type=str, help='IPv6 number 1') parser.add_argument('ip2', type=str, help='IPv6 number 2') args = parser.parse_args() return args # - Write a python script that checks whether two IPv6 networks are overlapping # - *overlap.py ip1 ip2* def parse_ip(ip_arg): if('/' in ip_arg): ip_arg = ip_arg.split('/')[0] else: # if no network specified, assume a netmask of /48 for all of them ip_arg = ip_arg + '/48' # strict false to avoid -> https://stackoverflow.com/questions/40839147/ipaddress-module-valueerrors-has-host-bits-set-self # strict is passed to IPv4Network or IPv6Network constructor. A ValueError is # raised if address does not represent a valid IPv4 or IPv6 address, or if # the network has host bits set. -> src https://docs.python.org/3/library/ipaddress.html#ipaddress.ip_network return ipaddress.IPv6Network(ip_arg, False) def main(): is_overlap=False args = proc_args() try: ip1 = parse_ip(args.ip1) ip2 = parse_ip(args.ip2) except: print('incorrect IPv6 address') # src https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Network.overlaps is_overlap = ip1.overlaps(ip2) if(is_overlap): print('overlap') sys.exit(1) else: print('no overlap') sys.exit(0) if __name__ == "__main__": main()