从给定子网获取下一个IP[Python]

从给定子网获取下一个IP[Python],python,ip,subnet,Python,Ip,Subnet,我想从给定的子网获取下一个IP。我知道如何从notation192.168.0.1/24获取IP范围,但我不知道如何获取范围内的下一个IP。我写了这段代码: def get_next_ip(ip): tmp = ip.split('.') val = int(tmp[0]) << 24 + int(tmp[1]) << 16 + int(tmp[2]) << 8 + int(tmp[3]) val = val + 1 octet

我想从给定的子网获取下一个IP。我知道如何从notation
192.168.0.1/24
获取IP范围,但我不知道如何获取范围内的下一个IP。我写了这段代码:

def get_next_ip(ip):
    tmp = ip.split('.')
    val = int(tmp[0]) << 24 + int(tmp[1]) << 16 + int(tmp[2]) << 8 + int(tmp[3])
    val = val + 1
    octet3 = val & 0xFF
    octet2 = (val >> 8) & 0xFF
    octet1 = (val >> 16) & 0xFF
    octet0 = (val >> 24) & 0xFF
    next_ip = str(octet0) + "." + str(octet1) + "." + str(octet2) + "." + str(octet3)
    return next_ip
def get_next_ip(ip):
tmp=ip.split('.'))
val=int(tmp[0])>16和0xFF
八位字节0=(val>>24)和0xFF
下一个ip=str(八位字节0)+“+”str(八位字节1)+“+”str(八位字节2)+“+”str(八位字节3)
返回下一个ip

当我运行
print get_next_ip(“192.168.0.1”)
时,它会打印
0.0.0.1
,而不是
192.168.0.2
。为什么?

这是因为优先级规则。
位移位不仅影响每个tmp[x],而且影响移位运算符之前的整个值。
首先将int(tmp[0])移位24
然后添加int(tmp[1])
然后将总和移位16


val=(int(tmp[0])您的代码根本不尊重网络掩码。事实上,它甚至不使用它。您解析“.”而不关心“/24”

您所完成的全部工作是解析IP4地址,然后向数字中添加1,以确保应用了回滚

如果您想要下一个IP,在这种情况下,下一个IP+268

import ipaddress
ipaddress.ip_address('192.168.0.4') + 268
ip_str=str(ipaddress.ip_address('192.168.0.4') + 268

ip_str现在应该是'192.168.1.16'

我在上面的链接上没有看到任何代码。我试过了:成功了
import ipaddress
ipaddress.ip_address('192.168.0.4') + 268
ip_str=str(ipaddress.ip_address('192.168.0.4') + 268