python_子网划分计算器

import ipaddress
class Compute:

    def __init__(self, network):
        self.net = network

    # 功能1: ip子网划分
    def ip(self):
        with open ("可用ip地址.txt","w") as tmp_file:
            pass
        ip_list = []  # 空列表存储ip
        # 查询ip个数\
        net = ipaddress.ip_network(self.net, strict=False) # 已经计算出来该网段的ip数目
        for ip in net:
            ip_list.append(str(ip))
        print("*" * 60)
        print("广播地址为:%s \n网络地址为:%s" % (ip_list[0], ip_list[len(ip_list)-1]))
        #print("可用地址为:%s-%s\n可用数量为:%d" % (ip_list[1], ip_list[len(ip_list)-2], len(ip_list)-2))
        print("网段掩码为:" + str(ipaddress.ip_network(self.net, strict=False).netmask))
        print("网段反码为:" + str(ipaddress.ip_network(self.net, strict=False).hostmask))
        print("可用地址详情见-----”可用ip地址.txt“")
        for i in net.hosts():
            with open ("可用ip地址.txt","a") as file:
                file.write(str(i) + "\n")
        print("*"*60)
    def subnet(self,cidr):
        self.cidr = cidr
        with open ("subnet.txt","w") as tmp_file:
            pass
        net = ipaddress.ip_network(self.net,strict=False)
        #print(net.netmask)
        base_subnet = "/" + str(self.cidr)
        num_cidr_ipv4 = 2 ** (32 - int(self.cidr))
        num_cidr_ipv6 = 2 ** (128 - int(self.cidr))
        ip_list = []
        version = int(ipaddress.ip_network(self.net,strict=False).version)
        if version == 4:
            for ip in net:
                subnet = str(ip) + base_subnet
                ip_list.append(subnet)
            for num in range(0,len(ip_list)//num_cidr_ipv4):
                with open ("subnet.txt","a",encoding="utf-8") as file:
                    file.write(ip_list[num_cidr_ipv4*num] + "\n")
        else:
            for ip in net:
                subnet = str(ip) + base_subnet
                ip_list.append(subnet)
            for num in range(0,len(ip_list)//num_cidr_ipv6):
                with open ("subnet.txt","a",encoding="utf-8") as file:
                    file.write(ip_list[num_cidr_ipv6*num] + "\n")
while True:
    try :
        ip = Compute(input("请输入要查询ip地址段:\n"))
        ip.ip()  # 输出网段相关信息
        choose = input("是否进行子网划,是请按1,否请按任意键")
        while choose == "1":
            try:
                ip.subnet(input("请输入要划分的子网id:例如:30\n"))# 输入要划分的子网
                print("子网详情见subnet.txt")
                break
            except ValueError:
                print("子网id错误,请重新输入")
    except ValueError:
        print("ip地址错误,请重新输入")

 

posted @ 2022-01-07 14:49  小菜鸟起飞ing  阅读(777)  评论(0)    收藏  举报