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

2024-05-16 03:12:47 发布

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

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

例如,如果我的起始网络地址是4001:1::/32,那么在每次迭代中,我都希望得到下一个网络地址:4001:2::/32,4001:3::/32,4001:4::/32,依此类推。在

^{1}$

注意:这是我之前关于fetching IPv4 networks的问题。在


Tags: 网络标准ipv6ipv4networks网络地址fetching
1条回答
网友
1楼 · 发布于 2024-05-16 03:12:47

ipcalc有一些例程可以使计算ip地址相当容易。但是如果最好不要安装ipcalc,一个继承自ipaddress.ipv6网络可以建造。在

代码

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)

测试代码:

^{pr2}$

结果:

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

Python 3.4:

python3.4不接受元组初始化ipaddress.ipv6网络. 这个代码可以解决这个问题。在

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)

相关问题 更多 >