美文网首页
子网划分(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("非法地址")
    

    相关文章

      网友评论

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

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