我想从给定的子网获取下一个IP。我知道如何从符号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
当我运行print get_next_ip("192.168.0.1")
时,它打印0.0.0.1
,而不是192.168.0.2
。为什么?你知道吗
你的代码根本不尊重网络掩码。事实上,它甚至不使用它。您解析“.”而不关心“/24”。你知道吗
您所完成的只是解析IP4地址,然后在数字上加1,以确保应用了回滚。你知道吗
如果你想要下一个IP在这种情况下下下一个IP+268
ip_str现在应该是'192.168.1.16'
这是因为优先级规则。
位移位不仅影响每个tmp[x],而且影响移位运算符之前的整个值。
首先将int(tmp[0])移动24
然后添加int(tmp[1])
然后将总和移动16
... 你知道吗
我会的。你知道吗
相关问题 更多 >
编程相关推荐