【问题标题】:How can I perform arithmetic on IPy IP addresses?如何对 IPy IP 地址进行算术运算?
【发布时间】:2015-02-09 06:43:43
【问题描述】:

使用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 加法器。

【问题讨论】:

  • 为什么不直接利用IPy 支持可迭代范围这一事实呢? for ip in IP('127.0.0.0/30'): print ip
  • @LukasGraf 因为我想非连续地迭代 IP,例如127.0.0.0、127.0.0.16、127.0.0.32...

标签: python ip-address


【解决方案1】:

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

使用 IPy,您可以使用 .int() 获取底层整数表示。要将整数转换为 IP 地址,可以使用函数 intToIp(ip, version) 返回 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')

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 2020-10-11
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-09-02
    • 2021-05-26
    相关资源
    最近更新 更多