从给定子网获取下一个IP

2024-09-30 23:39:58 发布

您现在位置: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。为什么?你知道吗


Tags: 代码ipget符号valtmpnextint
2条回答

你的代码根本不尊重网络掩码。事实上,它甚至不使用它。您解析“.”而不关心“/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'

这是因为优先级规则。
位移位不仅影响每个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])  

我会的。你知道吗

相关问题 更多 >