Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在Python 3中生成随机IPv6子网_Python 3.x_Ipv6 - Fatal编程技术网

Python 3.x 如何在Python 3中生成随机IPv6子网

Python 3.x 如何在Python 3中生成随机IPv6子网,python-3.x,ipv6,Python 3.x,Ipv6,我有一个现有的IPv6地址块。如何使用Python在该块中生成random/64网络,最好不使用任何外部库 例如,您可以从fd00::/8块开始生成随机专用ipv6网络。您可以使用标准的随机模块和ipaddress模块来完成此操作。简短版本: 从ipaddress导入IPv6网络 随机输入 ula=IPV6网络FD00::/8 随机_网络=IPv6网络 ula.network_address+random.getrandbits64-ula.prefixlen正如@Ron Maupin在他们对O

我有一个现有的IPv6地址块。如何使用Python在该块中生成random/64网络,最好不使用任何外部库


例如,您可以从fd00::/8块开始生成随机专用ipv6网络。

您可以使用标准的随机模块和ipaddress模块来完成此操作。简短版本:

从ipaddress导入IPv6网络 随机输入 ula=IPV6网络FD00::/8 随机_网络=IPv6网络
ula.network_address+random.getrandbits64-ula.prefixlen正如@Ron Maupin在他们对OP答案的评论中所指出的,这里有一个使用正确数量的随机位的解决方案:

#! /usr/bin/env python3
"""IPv6 ULA generation."""

from ipaddress import IPv6Network
from random import getrandbits


__all__ = ['get_ula_network']


ULA_BASE = IPv6Network("fd00::/8")


def get_ula_network() -> IPv6Network:
    """Generates a random ULA network."""

    random_suffix = getrandbits(40) << 80
    base_address = ULA_BASE.network_address + random_suffix
    return IPv6Network((base_address, 48))

实际上,您生成的随机位太多了。随机位的数量应为40,为您提供一个/48前缀,您可以从中派生65536/64网络。例如,您可以从fc00::/8唯一本地地址块开始生成一个随机专用ipv6网络。否,保留fc80::/8块。fd00::/8 ULA块具有L位集,可用于本地分配,但接下来的40位必须随机选择。这将为您提供一个/48前缀,您可以从中使用任何或所有65.536/64网络,而这些网络不需要随机选择。@RonMaupin I编辑此问题以询问fd00::/8。但是,我确实希望在此块中有一个随机子网。所以一个随机前缀+该前缀中的随机子网。这不是一个完整的答案。它只显示如何生成48位路由前缀,而不显示如何在该路由前缀中生成随机/64网络。您是否可以更新您的答案,以包括如何从该前缀中选择随机子网?
>>> network = get_ula_network()
>>> subnets = list(network.subnets(new_prefix=64))
>>> len(subnets)
65536
>>>