【问题标题】:Increment a IP address using subnet Mask使用子网掩码增加 IP 地址
【发布时间】:2021-12-30 23:55:35
【问题描述】:

我正在尝试根据子网掩码增加 IP。有办法吗?我能够使用整数增加 IP 地址,但不能使用子网掩码。我查看了 IPAddress 模块的文档,但找不到解决方法。有没有办法做到这一点?

>>> a
IPv4Address('192.168.1.1')
>>> a + 256
IPv4Address('192.168.2.1')
>>>
>>>
>>>
>>> sub_incr = '0.0.1.0'
>>> a + ipaddress.IPv4Address(sub_incr)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'IPv4Address' and 'IPv4Address'
>>> ```

Is there a way to do it?

【问题讨论】:

  • Netaddr 模块帮助..

标签: python python-3.x


【解决方案1】:

在您的情况下,您可以简单地将您的“网络掩码”转换为 int 并将其添加到 IP:

print(IPv4Address('192.168.1.1') + int(ipaddress.IPv4Address('0.0.1.0')))

如果您有 CIDR 表示法的网络掩码(例如 192.168.1.1/24),则可以使用简单的位移:

def increment(ip, mask):
    return ip + (1 << (32 - mask))

print(increment(ipaddress.IPv4Address('192.168.1.1'), 24))

如果您有拼写出的网络掩码(例如 255.255.255.0),您可以使用 IPv4Network 将其转换为 CIDR:

print(IPv4Network("192.168.1.1/255.255.255.0", strict=False).prefixlen) 

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2016-05-22
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多