如何对 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')
使用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')