脑子笨,口算子网掩码有点慢,于是用python3 写了个子网掩码计算器,可以算IPV4和IPV6,支持192.168.1.1/24和192.168.1.1/255.255.255.0两种掩码方式。

脚本内容如下:

from IPy import IP
import tkinter


def ipmask(strs=&39;&39;):
    try:
        ip = IP(strs, make_net=True)
        info = {}
        info[&39;IP/MASK&39;] = str(ip)
        info[&39;MASK&39;] = str(IP(ip).strNormal(2).split(&39;/&39;)[1])
        info[&39;LENGTH&39;] = ip.len()
        info[&39;START&39;] = str(ip[0])
        info[&39;END&39;] = str(ip[-1])
        ret = info
    except:
        ip = &39;&39;
        ret = &39;格式有误&39;
    return ret, ip


class MY_GUI():
    def __init__(self, init_window_name):
        self.init_window_name = init_window_name

    def set_init_window(self):
        self.init_window_name.title(&34;IP子网掩码计算器&34;)
        self.init_window_name.geometry(&39;500x610+500+100&39;)
        self.init_window_name.attributes(&34;-alpha&34;, 0.95)
        self.ip_label = tkinter.Label(self.init_window_name, text=&34;IP/MASK&34;)
        self.ip_label.pack(fill=tkinter.X, side=tkinter.TOP)
        self.ip_text = tkinter.Entry(self.init_window_name)
        self.ip_text.pack(fill=tkinter.X, side=tkinter.TOP, )
        self.button = tkinter.Button(self.init_window_name, text=&34;计算&34;, width=13, command=self.trans)
        self.button.pack(fill=tkinter.Y, side=tkinter.TOP)
        self.result_data_Text = tkinter.Text(self.init_window_name)
        self.scroll = tkinter.Scrollbar()
        self.scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
        self.scroll.config(command=self.result_data_Text.yview())
        self.result_data_Text.config(yscrollcommand=self.scroll.set)
        self.result_data_Text.pack(fill=tkinter.Y, side=tkinter.TOP, expand=&39;yes&39;)

     功能函数
    def trans(self):
        self.result_data_Text.delete(1.0, tkinter.END)
        strs = self.ip_text.get()
        info, ip = ipmask(strs)
        if &39;MASK&39; in info:
            self.result_data_Text.insert(tkinter.END,&39;\n&39;)
            for i in info:
                self.result_data_Text.insert(tkinter.END, &39;{:<10}{}\n&39;.format(i, info[i]))
            self.result_data_Text.insert(tkinter.END, &39;\n{}\n\n&39;.format(&39;=&39; * 50))
        else:
            self.result_data_Text.insert(tkinter.END, info)

        if ip:
            if ip.len() > 65536:
                self.result_data_Text.insert(tkinter.END, &39;列表过大\n&39;)
            else:
                for i in ip:
                    self.result_data_Text.insert(tkinter.END, str(i) + &39;\n&39;)


def gui_start():
    init_window = tkinter.Tk()
    ZMJ_PORTAL = MY_GUI(init_window)
    ZMJ_PORTAL.set_init_window()
    init_window.mainloop()


gui_start()