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

Networking 计算两个2 IP地址非CIDR之间的网络,networking,ipv4,subnet,cidr,Networking,Ipv4,Subnet,Cidr,我有一个问题,我给出了两个IPv4地址,我必须计算它们之间的最佳网络。例如,我有10.240.204.160和10.240.220.160,我必须找到它们之间的所有最小可用子网 请注意,这两个IP地址不是CIDR符号 我所想的解决方案,即 获取它们之间的主机数(此处为4096) 在4096中查找设置位,即第12位 现在创建一个20的子网掩码,即255.255.240.0 这样,我将在这两个IP地址之间获得子网掩码 现在的问题是,假设我得到了255.255.240.0,然后将其与启动IP进行and

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

请注意,这两个IP地址不是CIDR符号

我所想的解决方案,即

  • 获取它们之间的主机数(此处为4096)
  • 在4096中查找设置位,即第12位
  • 现在创建一个20的子网掩码,即255.255.240.0
  • 这样,我将在这两个IP地址之间获得子网掩码
  • 现在的问题是,假设我得到了
    255.255.240.0
    ,然后将其与启动IP进行anding,它将提供服务的网络
    10.240.192.0/20

    10.240.192.1到10.240.207.255
    但是我从
    10.240.204.160到10.240.220.160
    开始,因此它会被错误地破坏

    感觉如果我继续我的故事版本,我将犯下巨大的错误


    这里有人请帮帮我。

    你用错了面具。您应该使用
    /19
    而不是
    /20

    /20
    为您提供16个子网。简单数学学习我们(192是0+16=16、16+16=32、32+16=48等的结果)

    A
    /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
    
    def calc_inclusive_子网(ip1、ip2):#接受2个IP字符串
    #创建IP地址对象
    ip1_obj=ipaddress.IPv4Address(ip1)
    ip2_obj=ipaddress.IPv4Address(ip2)
    
    如果ip1_实际上我必须计算介于10.240.204.160和10.240.220.160之间的子网。如果我保留/19,那么我将有一个非常大的范围,我怀疑小于10.240.204.160的IP可能已经是其他网络的一部分。因此,范围是有限的,在计算subnet@Akaks,
    10.240.204.160/20
    属于网络
    10.240.192.0/20
    ,而
    10.240.220.160/20
    属于
    10.240.208.0/20
    网络。你看,两个不同的网络。这就是你需要
    /19
    面具的原因。现在我找到了我的问题所在,在这里。我现在正试图找到它的答案,如果你发现了,请更新thing@Akaks,您从未要求过任何有关编程的内容。您只是想知道如何计算2个地址之间的网络(我提供了)。如果你想要一个关于如何用Perl实现的答案,我建议你创建一个新的问题。谢谢你的评论,我正在寻找任何公式或算法来实现,所以我写了一个程序。谢谢,非常有用!。如果ip1_obj,则
    的“else”有一点错误