python中的MAC地址生成器

DEE*_*RGE 9 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))
Run Code Online (Sandbox Code Playgroud)

Rus*_*uss 10

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

"02:00:00:%02x:%02x:%02x" % (random.randint(0, 255),
                             random.randint(0, 255),
                             random.randint(0, 255))
Run Code Online (Sandbox Code Playgroud)

或者,如果您想在 unix'y shell 中执行此操作,这适用于许多:

printf '02:00:00:%02X:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256))
Run Code Online (Sandbox Code Playgroud)

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


更多详情...

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

如果 MAC 地址不是本地管理的,则意味着它应该是“全球唯一的”。这个类别的MAC地址是在IEEE集中注册的,你应该有一个IEEE发给你的唯一的OUI(Organizationally Unique Identifier)。有关OUI 值的全局注册表,请参阅链接。这个 OUI 值最终出现在前 3 个字节中(或者实际上只是前 22 位)。

MAC 地址并没有那么复杂,因此您可能也应该查看一下定义。维基百科有一个很好的


par*_*axi 5

从mamofish的代码修改为Python3:

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

生成 mac 地址作为字符串,从00:00:00:00:00:0000:00:00:ff:ff:ff


Bri*_*ain 1

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

可能需要考虑在 OUI 中使用“本地管理”标志,以避免与现有设备制造商发生冲突。

避免设置多播位等陷阱(您的示例就是这样)。