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

时间:2018-04-27 06:44:18

标签: python ip subnet

我想从给定的子网获取下一个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。为什么?

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;