def test_mac_to_ipv6(): mac = EUI('00-1B-77-49-54-FD') eui = mac.eui64() assert mac == EUI('00-1B-77-49-54-FD') assert eui == EUI('00-1B-77-FF-FE-49-54-FD') assert mac.modified_eui64() == EUI('02-1B-77-FF-FE-49-54-FD') assert mac.ipv6_link_local() == IPAddress('fe80::21b:77ff:fe49:54fd') assert eui.ipv6_link_local() == IPAddress('fe80::21b:77ff:fe49:54fd') assert mac.ipv6(0x12340000000000000000000000000000) == IPAddress('1234::21b:77ff:fe49:54fd') assert eui.ipv6(0x12340000000000000000000000000000) == IPAddress('1234::21b:77ff:fe49:54fd')
def test_mac_to_ipv6(): mac = EUI('00-1B-77-49-54-FD') eui = mac.eui64() assert mac == EUI('00-1B-77-49-54-FD') assert eui == EUI('00-1B-77-FF-FE-49-54-FD') assert mac.modified_eui64() == EUI('02-1B-77-FF-FE-49-54-FD') assert mac.ipv6_link_local() == IPAddress('fe80::21b:77ff:fe49:54fd') assert eui.ipv6_link_local() == IPAddress('fe80::21b:77ff:fe49:54fd') assert mac.ipv6(0x12340000000000000000000000000000) == IPAddress( '1234::21b:77ff:fe49:54fd') assert eui.ipv6(0x12340000000000000000000000000000) == IPAddress( '1234::21b:77ff:fe49:54fd')
import math import struct import hashlib if __name__ == '__main__': parser = argparse.ArgumentParser( description='Generate a Unique Local Address' ) parser.add_argument('-m', '--mac', help='MAC address', default=uuid.getnode()) args = parser.parse_args() try: eui48 = EUI(args.mac) except Exception as err: print('{}: {}'.format(parser.prog, err), file=sys.stderr) sys.exit(1) else: eui64 = eui48.modified_eui64() now = datetime.utcnow() start = datetime(1900, 1, 1, 0, 0, 0) delta = (now - start).total_seconds() subsec, sec = math.modf(delta) ntpstamp = (int(sec) << 32) + int(subsec * 0xffffffff) key = eui64.packed + struct.pack('Q', ntpstamp) id = hashlib.sha1(key).hexdigest()[-10:] print('fd{}:{}:{}::/48'.format(id[0:2], id[2:6], id[6:10])) sys.exit(0)