我遇到问题我在哪里给了两个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
开始,因此它会错误地打破
感觉我会犯下大错的错误如果我选择我的故事版本。
任何人都可以帮助我。
答案 0 :(得分:1)
你使用错误的面具。您应该使用/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
网络。
答案 1 :(得分:0)
我一直在寻找预制的代码,却偶然发现了这个线程。我最终在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