如何对 IPy IP 地址执行算术运算?

How can I perform arithmetic on IPy IP addresses?

使用IPy模块,如何对IP地址进行运算?也就是说,一些函数可以执行以下操作:

>>> addIp(IPy.IP('10.0.0.0'), 2)
IP('10.0.0.2')
>>> addIp(IPy.IP('10.0.0.255'), 2)
IP('10.0.1.1')

IP 类型确实有一个 __add__ 方法,但它用于从两个 IP 地址创建范围。

我知道这样做看起来很奇怪;我的用例是遍历 IP 范围,我更愿意这样做而不必实现我自己的 base-256 加法器。

您可以利用 IP 地址只是奇特整数这一事实,执行常规整数运算并将结果转换回 IP 地址。

使用 IPy,您可以使用 .int() 获取基础整数表示。要将整数转换为 IP 地址,可以使用 intToIp(ip, version) 函数,其中 returns 一个 IP 字符串;请注意,如果结果超出有效范围,它将抛出 ValueError

所以要实现你想要的addIp()功能:

def addIp(ip, value):
    return IPy.IP(intToIp(ip.int() + value, ip.version()))

>>> IPy.IP(IPy.intToIp(IPy.IP('10.0.0.255').int() + 2, 4))
IP('10.0.1.1')