[英]Get next IP from a given subnet [Python]
我想从给定的子网中获取下一个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
。 为什么?
这是因为有优先顺序规则。
移位不仅影响每个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])
会做到的。
您的代码完全不遵守网络掩码。 实际上,它甚至不使用它。 您解析为“。” 并且不在乎“ / 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”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.