我有问题我给了两个IPv4地址,我必须计算它们之间的最佳网络。例如,我有10.240.204.160
和10.240.220.160
,我必须找到它们之间的所有最小可用子网。
请注意,这两个IP地址不是CIDR表示法。
我认为的解决方案.i.e
现在的问题是假设我得到了255.255.240.0
然后用起始IP和它将提供网络10.240.192.0/20
将服务
10.240.192.1 to 10.240.207.255
,但我开始与10.240.204.160 to 10.240.220.160
因此它将错误地打破
如果我按照我的故事版本,我会感到很大的错误。
有人在这里请帮助我。
你使用错误的面具。你应该使用/19
而不是/20
。
/20
为您提供16个子网。简单的数学学习我们192 + 16 = 208(192是0 + 16 = 16,16 + 16 = 32,32 + 16 = 48等的结果)
/19
为您提供32个子网 - > 192 + 32 = 224
请记住224是下一个网络的开始。你的/19
网络将有从10.240.192.0/24
到10.240.223.0/24
的子网。
10.240.204.160
和10.240.220.160
属于10.240.192.0/19
网络。
我正在寻找预先制作的代码并偶然发现这个帖子。我最终在python中编写了以下内容。你总是有机会跨越2个子网。如果有必要,您只是错过了最后一步检查并在网络掩码上扩展一位。
def calc_inclusive_subnet(ip1, ip2): #accepts 2 IP strings
#make IP Address objects
ip1_obj=ipaddress.IPv4Address(ip1)
ip2_obj=ipaddress.IPv4Address(ip2)
if ip1_obj<=ip2_obj:
min_ip=ip1_obj
max_ip=ip2_obj
else:
min_ip=ip2_obj
min_ip=ip1_obj
distance = int(max_ip)-int(min_ip)
ip_range=0 #increment powers of 2 until you have subnet distance
while 2**ip_range < distance:
ip_range += 1
net = ipaddress.IPv4Network(str(min_ip) + '/' +str(32-ip_range), strict=False)
if max_ip not in net:
# i.e. if the distance implies one size network, but IPs span 2
ip_range+=1
net = ipaddress.IPv4Network(str(min_ip) + '/' +str(32-ip_range), strict=False)
return net