python中的MAC地址生成器

时间:2011-12-13 05:47:46

标签: python virtualization

为了创建批量虚拟机,我需要在Python中创建一个随机MAC地址生成器。我不知道如何生成随机MAC地址。

以下程序是否正确?

import random

# The first line is defined for specified vendor
mac = [ 0x00, 0x24, 0x81,
    random.randint(0x00, 0x7f),
    random.randint(0x00, 0xff),
    random.randint(0x00, 0xff) ]

print ':'.join(map(lambda x: "%02x" % x, mac))

4 个答案:

答案 0 :(得分:1)

由于唯一性是您应该关心的(除了使地址格式正确)之外,我会担心OUI中的MSB并使用NIC特定字节中的序列。地址的分配对您的应用程序来说可能并不重要(即使某些NIC或交换机实现可能将它们用作哈希的输入,这可能不是一个大问题。)

希望考虑使用“本地管理”flag in the OUI来避免与现有设备制造商发生冲突。

避免像设置多播位这样的陷阱(你的例子)。

答案 1 :(得分:1)

http://www.wikihow.com/Create-a-Secure-Session-Management-System-in-PHP-and-MySQL#Create_session.class.php_file_sub修改为Python3:

mac = '00:00:00:'
for number in range(16**6):
    hex_num = hex(number)[2:].zfill(6)
    print("{}{}{}:{}{}:{}{}".format(mac,*hex_num))

将mac地址生成为00:00:00:00:00:0000:00:00:ff:ff:ff的字符串。

答案 2 :(得分:1)

对于想要生成自己的MAC地址的人(一个很好的例子是VM NIC),你可能只想要这个:

"02:00:00:%02x:%02x:%02x" % (random.randint(0, 255),
                             random.randint(0, 255),
                             random.randint(0, 255))

或者,如果你想在unix的shell中这样做,这适用于很多:

printf '02:00:00:%02X:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256))

这为您提供了一个在您的环境中100%安全使用的单播MAC地址,并且不会践踏任何人注册的MAC地址空间。

更多细节......

顶部字节(0x02)的最后两位为您提供本地管理的单播地址,如果您正在使用stackoverflow来获取如何生成此地址,那么这可能是您想要的。 :)

如果MAC地址在本地管理,则意味着它应该是全球唯一的#34;。此类别中的MAC地址已在IEEE中集中注册,您应该拥有IEEE颁发给您的唯一OUI(组织唯一标识符)。有关OUI值的全局注册表,请参阅this链接。这个OUI值最后是前3个字节(或者恰好是前22个字节)。

MAC地址并不复杂,所以您应该只看一下定义。维基百科有a good one

答案 3 :(得分:0)

为避免重复:

如果你要生成很多(数百万)这样的MAC地址,你可能想要生成MAC的有序列表,将其提供给线性随机化过程(GNU排序-R应该没问题 - 我不要认为它在线性时间内这样做,但它有一个类似的最终结果),然后根据需要从随机列表的一端拉出新的地址。我相信这样的列表应该适合大约34兆字节。

如果您只需要数千个,那么最好还是维护一个包含已选择值的文本文件,并检查与之冲突,并随时添加新值。这是一个较慢的算法,但是它的开销要小得多,因此对于较少数量的mac地址来说仍然是一个胜利。

顺便说一句,如果第4个八位字节(从左边开始编号为1),是0-ff而不是0-7f?我发现在Mac地址的维基百科页面中没有出现7f或127: http://en.wikipedia.org/wiki/MAC_address