计算两个IP地址非CIDR之间的网络

问题描述 投票:1回答:2

我有问题我给了两个IPv4地址,我必须计算它们之间的最佳网络。例如,我有10.240.204.16010.240.220.160,我必须找到它们之间的所有最小可用子网。

请注意,这两个IP地址不是CIDR表示法。

我认为的解决方案.i.e

  1. 获取它们之间的主机数量(这里是4096)
  2. 在4096中找到第12位的设置位
  3. 现在创建一个20的子网掩码,即255.255.240.0
  4. 这样我将在这两个IP地址之间获得子网掩码

现在的问题是假设我得到了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因此它将错误地打破

如果我按照我的故事版本,我会感到很大的错误。

有人在这里请帮助我。

networking ipv4 subnet cidr
2个回答
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/2410.240.223.0/24的子网。

10.240.204.16010.240.220.160属于10.240.192.0/19网络。


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
© www.soinside.com 2019 - 2024. All rights reserved.