from sys import argv import argparse import ipaddress import random #import getopt #option function parser = argparse.ArgumentParser(description="Generating IPv6 networks") parser.add_argument('--size', help="size") parser.add_argument('string', nargs='+', help="network") try: args = parser.parse_args() if argv[1] == '--size': ipnet = argv[3] size = 128 - int(argv[2]) else: if len(argv) > 2 : ipnet = argv[1] size = 128 - int(argv[2]) else: ipnet = argv[1] size = 80 ip = ipnet.split('/') ip2 = ipaddress.ip_network(ip[0]).supernet(new_prefix=int(ip[1])) # minimum network minNet = ipaddress.ip_network(ip[0]).supernet(new_prefix=128-size) # seperate network ip2first = ipaddress.IPv6Network(ip2)[0] ip2last = ipaddress.IPv6Network(ip2)[-1] minNetlast = ipaddress.IPv6Network(minNet)[-1] # calculation network maxRan = int(ip2last) - int(minNetlast) >> size result = ipaddress.ip_address((random.randrange(0,maxRan) << size) + int(ip2first) ) resultNetwork = ipaddress.ip_network(result).supernet(new_prefix=128-size) print(resultNetwork) except: info=""" wrong input ex) --size 64 2001:db8::/40 or 2001:db8::/40 64 or 2001:db8::/40 #default size 48 """ print(info)