Source code for jfscripts.mac_to_eui64

#! /usr/bin/env python3

import argparse
import ipaddress
import re

from jfscripts import __version__


[docs] def mac_to_eui64(mac, prefix=None): """ Convert a MAC address to a EUI64 address or, with prefix provided, a full IPv6 address """ # http://tools.ietf.org/html/rfc4291#section-2.5.1 eui64 = re.sub(r"[.:-]", "", mac).lower() # 5c514fcf0a5d eui64 = eui64[0:6] + "fffe" + eui64[6:] # 5c514ffffecf0a5d eui64 = hex(int(eui64[0:2], 16) ^ 2)[2:].zfill(2) + eui64[2:] # 5e514ffffecf0a5d if prefix is None: return ":".join(re.findall(r".{4}", eui64)) else: try: net = ipaddress.ip_network(prefix, strict=False) euil = int("0x{0}".format(eui64), 16) return str(net[euil]) except: # noqa: E722 return
[docs] def get_parser(): """The argument parser for the command line interface. :return: A ArgumentParser object. :rtype: argparse.ArgumentParser """ parser = argparse.ArgumentParser( description="Convert mac addresses to EUI64 ipv6 addresses.", ) parser.add_argument( "mac", help="The mac address.", ) parser.add_argument( "prefix", help="The ipv6 /64 prefix.", ) parser.add_argument( "-V", "--version", action="version", version="%(prog)s {version}".format(version=__version__), ) return parser
[docs] def main(): args = get_parser().parse_args() print(mac_to_eui64(args.mac, args.prefix))
if __name__ == "__main__": main()