如何从当前网络地址递增并获取下一个IPv6网络地址

穆罕默德

使用标准 python 包,如果我们提供任何 IPv6 网络地址作为输入,我如何获得接下来的几个 IPv6 网络地址。基本上我想迭代给定的网络地址,并且在每次迭代时它应该递增并获得下一个网络

例如,如果我的起始网络地址是 4001:1::/32,那么在每次迭代时,我希望得到下一个网络地址为 4001:2::/32、4001:3::/32、4001:4: :/32 等等。

>>> inet = iterate_on('4001:1::/32')
>>> next(inet)
4001:2::/32
>>> next(inet)
4001:3::/32

注意:这是我之前关于获取 IPv4 网络的问题

斯蒂芬·劳赫

ipcalc具有使 IP 地址的数学计算相当容易的例程。但是如果最好不要安装 ipcalc,可以构造一个继承自 ipaddress.IPv6Network 的类。

代码

import ipaddress

class BetterIPv6Network(ipaddress.IPv6Network):

    def __add__(self, offset):
        """Add numeric offset to the IP."""
        new_base_addr = int(self.network_address) + offset
        return self.__class__((new_base_addr, self.prefixlen))

    def size(self):
        """Return network size."""
        return 1 << (self.max_prefixlen - self.prefixlen)

测试代码:

import itertools as it
network = BetterIPv6Network(u'4001:1::/32')
network_addrs = (network + i * network.size() for i in it.count())
print(next(network_addrs))
print(next(network_addrs))
print(next(network_addrs))

结果:

4001:1::/32
4001:2::/32
4001:3::/32

蟒蛇 3.4:

Python 3.4 不接受元组来初始化 ipaddress.IPv6Network。这段代码将解决这个问题。

import ipaddress

class BetterIPv6Network(ipaddress.IPv6Network):

    def __add__(self, offset):
        """Add numeric offset to the IP."""
        new_base_addr = int(self.network_address) + offset
        new_base_addr_str = str(self.__class__(new_base_addr)).split('/')[0]
        return self.__class__(
            new_base_addr_str + '/' + str(self).split('/')[1])

    def size(self):
        """Return network size."""
        return 1 << (self.max_prefixlen - self.prefixlen)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

网络地址识别

来自分类Dev

如何使用固定地址委派从飓风电气设置ipv6网络?

来自分类Dev

网络地址中的&符

来自分类Dev

使用Python获取连接接口的网络地址

来自分类Dev

解析网络地址字符串

来自分类Dev

如何用数字2替换有效网络地址的最后一个八位位组

来自分类Dev

查找D类IPv4的默认子网掩码,网络地址和广播地址

来自分类Dev

网络地址和路由器地址之间的差异

来自分类Dev

通常,每个套接字地址(协议/网络地址/端口)只能使用一种

来自分类Dev

使用OpenSSH创建覆盖IPv6网络

来自分类Dev

PfSense IPv6网络配置

来自分类Dev

路由器与交换机(网络地址转换)

来自分类Dev

Hibernate + PostgreSQL +网络地址类型(inet,cdir)

来自分类Dev

非阻塞网络地址解析(gethostbyname或getaddrinfo)?

来自分类Dev

蟒蛇在数据帧扩展网络地址

来自分类Dev

使用标准库处理Python CIDR网络地址

来自分类Dev

PF和NAT类型(网络地址转换)

来自分类Dev

网络地址的不同格式表示什么?

来自分类Dev

指定 Azure Kubernetes 虚拟网络地址空间

来自分类Dev

如何在javascript中验证IPV6网络前缀

来自分类Dev

如何在Google Cloud Cloud SQL中授权我的动态IP网络地址?

来自分类Dev

如何在Android上将套接字绑定到本地wifi网络地址?

来自分类Dev

如何计算具有子网掩码202.145.90.7/20的IP的网络地址?

来自分类Dev

如何在Android上将套接字绑定到本地wifi网络地址?

来自分类Dev

在Android中查找本地网络地址-包括IP和NetMask?(以太网不是wifi)

来自分类Dev

在启动tomcat时,通常只允许每个套接字地址(协议/网络地址/端口)使用一种。

来自分类Dev

HttpClient:每个套接字地址(协议/网络地址/端口)通常仅允许使用一种

来自分类Dev

RestSharp响应通常,每个套接字地址(协议/网络地址/端口)仅允许使用一种

来自分类Dev

在启动tomcat时,通常仅允许每个套接字地址(协议/网络地址/端口)使用一种。

Related 相关文章

  1. 1

    网络地址识别

  2. 2

    如何使用固定地址委派从飓风电气设置ipv6网络?

  3. 3

    网络地址中的&符

  4. 4

    使用Python获取连接接口的网络地址

  5. 5

    解析网络地址字符串

  6. 6

    如何用数字2替换有效网络地址的最后一个八位位组

  7. 7

    查找D类IPv4的默认子网掩码,网络地址和广播地址

  8. 8

    网络地址和路由器地址之间的差异

  9. 9

    通常,每个套接字地址(协议/网络地址/端口)只能使用一种

  10. 10

    使用OpenSSH创建覆盖IPv6网络

  11. 11

    PfSense IPv6网络配置

  12. 12

    路由器与交换机(网络地址转换)

  13. 13

    Hibernate + PostgreSQL +网络地址类型(inet,cdir)

  14. 14

    非阻塞网络地址解析(gethostbyname或getaddrinfo)?

  15. 15

    蟒蛇在数据帧扩展网络地址

  16. 16

    使用标准库处理Python CIDR网络地址

  17. 17

    PF和NAT类型(网络地址转换)

  18. 18

    网络地址的不同格式表示什么?

  19. 19

    指定 Azure Kubernetes 虚拟网络地址空间

  20. 20

    如何在javascript中验证IPV6网络前缀

  21. 21

    如何在Google Cloud Cloud SQL中授权我的动态IP网络地址?

  22. 22

    如何在Android上将套接字绑定到本地wifi网络地址?

  23. 23

    如何计算具有子网掩码202.145.90.7/20的IP的网络地址?

  24. 24

    如何在Android上将套接字绑定到本地wifi网络地址?

  25. 25

    在Android中查找本地网络地址-包括IP和NetMask?(以太网不是wifi)

  26. 26

    在启动tomcat时,通常只允许每个套接字地址(协议/网络地址/端口)使用一种。

  27. 27

    HttpClient:每个套接字地址(协议/网络地址/端口)通常仅允许使用一种

  28. 28

    RestSharp响应通常,每个套接字地址(协议/网络地址/端口)仅允许使用一种

  29. 29

    在启动tomcat时,通常仅允许每个套接字地址(协议/网络地址/端口)使用一种。

热门标签

归档