美文网首页
子网划分(python程序)

子网划分(python程序)

作者: lzj01231 | 来源:发表于2023-01-24 12:29 被阅读0次

已知网络地址和子网掩码

def subnetting(part):  # 子网划分
    n = network_num - part * 8  # 借了n个网络位
    if n < 0:
        print("暂不支持超网划分")
    else:
        subnet = 2 ** n  # 子网个数
        terminal_num = 2 ** (8 - n)
        print("可划分子网数为:{}".format(subnet))
        times = 0
        for i in range(subnet):
            times += 1
            ip_start = [i for i in ip]
            network_address = [i for i in ip]
            ip_start[3] += 1
            print("第{:}个网段地址范围为:{:15}  至  ".format(times, ".".join(map(str, list(ip_start)))), end="")
            ip[part] += terminal_num - 1
            for i in range(3, part, -1):
                ip[i] += 255
            ip_end = [i for i in ip]
            broadcast_address = [i for i in ip]
            ip_end[3] -= 1
            print("{:19}网络地址:{:19}广播地址:{:}".format(".".join(map(str, list(ip_end))),
                                                   ".".join(map(str, list(network_address))),
                                                   ".".join(map(str, list(broadcast_address)))))
            ip[part] += 1
            for i in range(3, part, -1):
                ip[i] -= 255
        print("每个子网主机数为:{}".format(2 ** host_num - 2))


while True:
    try:
        ip = list(map(int, input("请输入网络地址:").split(".")))  # 列表型10进制IP
        if 224 <= ip[0] <= 239:
            print("D类地址")
            continue
        elif 240 <= ip[0] <= 255:
            print("E类地址")
            continue
        elif ip[0] == 127:
            print("回环地址")
            continue
        else:
            netmask = list(map(int, input("请输入子网掩码:").split(".")))  # 列表型10进制子网掩码
    except ValueError:  # 字母型非法地址
        print("非法地址!")
    else:
        ip_bin = list(map(lambda x: '{:0>8}'.format(x[2:]), list(map(bin, ip))))  # 列表型二进制IP
        netmask_bin = list(map(lambda x: '{:0>8}'.format(x[2:]), list(map(bin, netmask))))  # 列表型二进制子网掩码
        IP_bin = "".join(ip_bin)  # 字符串型二进制IP
        NETMASK_bin = "".join(netmask_bin)  # 字符串型二进制子网掩码
        network_num = 0  # 网络号位数
        for i in NETMASK_bin:
            if int(i) == 1:
                network_num += 1
            else:
                break
        host_num = 32 - network_num  # 主机号位数
        if len(ip) != 4 or len(netmask) != 4:
            print("非法地址!")  # 长度型非法地址
        elif any(i > 255 or i < 0 for i in ip + netmask):
            print("非法地址!")  # 范围型非法地址
        elif any(int(i) == 1 for i in IP_bin[network_num:]):
            print("非法地址!")  # 非网络地址
        else:  # 地址类型判断
            if 0 <= ip[0] <= 126:
                print("A类地址")
                subnetting(1)  # 子网划分
            elif 128 <= ip[0] <= 191:
                print("B类地址")
                subnetting(2)  # 子网划分
            elif 192 <= ip[0] <= 223:
                print("C类地址")
                subnetting(3)  # 子网划分
            else:
                print("非法地址")

相关文章

  • IP地址和子网划分学习笔记之《子网划分详解》

    转载自:IP地址和子网划分学习笔记之《子网划分详解》 一、 子网划分概述 1、为什么要划分子网? IPv4地址如果...

  • 子网划分

  • 子网划分

    为什么要子网划分? 在设计网络时使用有类IP地址会造成地址浪费 IP地址空间只能按照默认的类别使用,例如一个B类地...

  • 子网划分

    一、子网掩码 子网掩码是一种用来指明一个 IP 地址的哪些标识是主机所在的子网,以及哪些位标识的是主机的位掩码。 ...

  • 子网划分

    近期经常涉及到子网掩码和子网划分,因此写着这个关于子网划分教程,欢迎一起学习。 一、为什么要用子网掩码? 在使用T...

  • 子网划分

    子网划分IPV4地址:32位二进制构成 点分十进制标识存在网络位和主机位;同一广播域内所有设备具有相同的网络位,...

  • 子网划分

    借用主机位作子网位,划分出多个子网 可分为:等长子网划分:将一个网段等分成多个子网,每个子网的可用IP地址数量是一...

  • 子网划分

    需要划分m个子网,就借n个主机位为网络位(2^n=m)。每个子网有2(8-n)个地址,每个子网可用ip为2(8-n...

  • 子网与子网划分

    子网出现的背景及原因 因特网规模的急剧增长,对IP地址的需求激增,带来的问题是:IP地址资源的严重匮乏,路由表规模...

  • 计算机网络--子网划分+思科CiscroPacket使用

    1.0概念 子网划分 是通过借用IP地址的若干位主机位来充当子网地址从而将原网络划分为若干子网...

网友评论

      本文标题:子网划分(python程序)

      本文链接:https://www.haomeiwen.com/subject/frvyfdtx.html