我想从给定的子网获取下一个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
。为什么?
答案 0 :(得分:1)
这是因为优先顺序规则
位移不仅影响每个tmp [x],而且影响移位运算符之前的整个值
首先,你将int(tmp [0])移动24
然后添加int(tmp [1])
然后将总和移动16
...
val = (int(tmp[0]) << 24) + (int(tmp[1]) << 16) + (int(tmp[2]) << 8) + int(tmp[3])
会这样做。
答案 1 :(得分:1)
您的代码根本不尊重网络掩码。实际上它甚至没有使用它。你解析&#34;。&#34;并且不关心&#34; / 24&#34;。
您所完成的只是解析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现在应该是&#39; 192.168.1.16&#39;