改进随机选择:Python子网掩码生成器

2024-04-29 19:42:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建这段代码是为了生成一个随机子网掩码(所以我可以在纸上练习将它们转换为相关前缀)。我正在随机创建一个子网掩码,一次创建一个八位字节,但如果任何八位字节不是255,其余八位字节将自动为“0”:

from random import randint

# choose subnet bytes at random
def pick_num():
    # list of valid subnet bytes
    list = [0, 128, 192, 224, 240, 248, 252, 254, 255]

    random = randint(0,8)
    num = list[random]
    return num

def generate_netmask():
    current_byte = 0
    submask_mask = ""
    count = 1
    while count <= 4:
        current_byte = pick_num()
        if current_byte == 255:
            submask_mask += str(current_byte) + "."
            count += 1
        else:
            submask_mask += str(current_byte) + "."
            count += 1
            break

    while count != 5:
        if count != 4:
            submask_mask += "0."
            count += 1
        elif count == 4:
            submask_mask += "0"
            count += 1

    return submask_mask

print(generate_netmask())

结果,我的大部分输出都没有通过第一个或第二个八位字节。例如:128.0.0.0、192.0.0、254.0.0.0等等。我不时会得到类似于:255.255.192.0的结果

我认为这是一个学习如何在代码中使用随机性的有趣机会

有谁能推荐一种方法,使此代码对其他可能的子网掩码更公平?我意识到我还可以列出所有子网掩码,并随机选择列表中的元素

提前谢谢大家,, 塞巴斯蒂安


Tags: 代码bytesdefcountmaskrandombytecurrent