#!/usr/bin/python3 from socket import AF_INET6, getaddrinfo, inet_ntop, inet_pton from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter, description='concat ipv6 addr with given host and prefix part') parser.add_argument('host', help='ipv6(name) for the host part') parser.add_argument('prefix', help='ipv6(name) for the prefix/network part') parser.add_argument('prefix_len', nargs='?', default='64', type=int, help='prefix length') args = parser.parse_args() pa = lambda s: inet_pton(AF_INET6, getaddrinfo(s, None, AF_INET6)[0][4][0]) addr = pa(args.prefix), pa(args.host) res = [0, ] * 16 for i in range(128): res[i//8] += addr[args.prefix_len <= i][i//8] & 1 << (7 - i % 8) print(inet_ntop(AF_INET6, bytes(res)))