本次代码只利于人员进行分析,没有啥用,小学期作业,被迫工作。

  1 import tkinter
2 from tkinter import *
3 import time
4 import nmap
5 import psutil
6 LOG_LINE_NUM = 0
7 import psutil
8 import datetime
9 import time
10 import socket
11 import uuid
12 #import geoip2.database
13 import dns.resolver
14 class MY_GUI():
15 def __init__(self, init_window_name):
16 self.init_window_name = init_window_name
17
18 def set_int_DS(self):
19 DS= Tk()
20 DS.geometry('400x400')
21 DS.title('域名')
22 DS_data_Text = Text(DS, width=150, height=49) # 处理结果展示
23 DS_data_Text.grid(row=1, column=12, rowspan=15, columnspan=10)
24 res = dns.resolver.query('testfire.net', 'NS')
25 DS_data_Text.insert(END,'本次解析域名为testfire.net')
26 for item in res.response.answer:
27 DS_data_Text.insert(END,item)
28 DS.mainloop()
29
30 def set_init_zisao(self):
31 show= Tk() # 实例化出一个父窗口
32 show.geometry('1400x700')
33 # 设置根窗口默认属性
34 show.title('页面')
35 #page=tkinter.Frame(show)
36 result_data_Text = Text(show, width=700, height=49) # 处理结果展示
37 result_data_Text.grid(row=1, column=12, rowspan=15, columnspan=10)
38 #result_data_Text.insert(END, 'a_' + str(i))
39 now_time = time.strftime('%Y-%m-%d-%H:%M:%S'+'\n', time.localtime(time.time()))
40 result_data_Text.insert(END,now_time)
41 # 系统启动时间
42 result_data_Text.insert(END,"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"+'\n'))
43 # 系统用户
44 users_count = len(psutil.users())
45 users_list = ",".join([u.name for u in psutil.users()])
46 result_data_Text.insert(END,"当前有%s个用户,分别是 %s" % (users_count, users_list)+'\n')
47 #result_data_Text.insert(END,'-----------------------------cpu信息---------------------------------------')
48 # 查看cpu物理个数的信息
49 result_data_Text.insert(END,"物理CPU个数: %s" % psutil.cpu_count(logical=False)+'\n')
50 result_data_Text.insert(END,"逻辑CPU个数: %s" % psutil.cpu_count(logical=True)+'\n')
51 result_data_Text.insert(END,"CPU核心总数: %s" % psutil.cpu_count()+'\n')
52 # CPU的使用率
53 cpu = (str(psutil.cpu_percent(1))) + '%'
54 result_data_Text.insert(END,"cup使用率: %s" % cpu+'\n')
55 #result_data_Text.insert(END,'-----------------------------mem信息---------------------------------------')
56 # 查看内存信息,剩余内存.free 总共.total
57 # round()函数方法为返回浮点数x的四舍五入值。
58 free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2))
59 total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2))
60 memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(
61 psutil.virtual_memory().total)
62 swap_free = str(round(psutil.swap_memory().free / (1024.0 * 1024.0 * 1024.0), 2))
63 swap_total = str(round(psutil.swap_memory().total / (1024.0 * 1024.0 * 1024.0), 2))
64 swap_memory = int(psutil.swap_memory().total - psutil.swap_memory().free) / float(psutil.swap_memory().total)
65 result_data_Text.insert(END,"物理内存: %s G" % total+'\n')
66 result_data_Text.insert(END,"剩余物理内存: %s G" % free+'\n')
67 result_data_Text.insert(END,"物理内存使用率: %s %%" % int(memory * 100)+'\n')
68 result_data_Text.insert(END,"交换内存: %s G" % swap_total+'\n')
69 result_data_Text.insert(END,"剩余交换内存: %s G" % swap_free+'\n')
70 result_data_Text.insert(END,"交换内存使用率: %s %%" % int(swap_memory * 100)+'\n')
71 #result_data_Text.insert(END,'-----------------------------网络信息---------------------------------------')
72 # 网卡,可以得到网卡属性,连接数,当前流量等信息
73 hostname = socket.gethostname() # 获取本机主机名
74 ip = socket.gethostbyname(hostname) # 获取本机ip地址
75 mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
76 mac = ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
77 net = psutil.net_io_counters()
78 bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
79 bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
80 result_data_Text.insert(END,"主机名称为:"+'\n', hostname)
81 result_data_Text.insert(END,"IP地址为:"+'\n', ip)
82 result_data_Text.insert(END,"MAC地址:"+'\n', mac)
83 result_data_Text.insert(END,"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent)+'\n')
84
85 #result_data_Text.insert(END,'-----------------------------磁盘信息---------------------------------------')
86 io = psutil.disk_partitions()
87 # print("系统磁盘信息:" + str(io))
88 o = psutil.disk_usage("/")
89 ioo = psutil.disk_io_counters()
90 result_data_Text.insert(END,ioo)
91 result_data_Text.insert(END,"盘总容量:" + str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G"+'\n')
92 result_data_Text.insert(END,"已用容量:" + str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G"+'\n')
93 result_data_Text.insert(END,"可用容量:" + str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G"+'\n')
94
95 #result_data_Text.insert(END,'-----------------------------进程信息-------------------------------------')
96 # 查看系统全部进程
97 for pnum in psutil.pids():
98 p = psutil.Process(pnum)
99 result_data_Text.insert(END,"进程名 %-20s 内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " \
100 % (p.name(), p.memory_percent(), p.status(), p.create_time())+'\n')
101 #page.pack()
102 show.mainloop()
103
104 def set_init_saomiao(self):
105 nm = nmap.PortScanner()
106 if not self.init_data_Text.get is NONE:
107 ret = nm.scan(self.init_data_Text.get(1.0, END).strip().replace("\n", ""), '20-1000') # 220.181.38.148/24
108 # self.result_data_Text.insert(1.0, ret)
109 for host in nm.all_hosts(): # 返回被扫描的主机列表给host
110 self.result_data_Text.insert(END,'Host : %s (%s)' % (host, nm[host].hostname())+'\n') # nm[host].hostname()获取目标主机的主机名
111 self.result_data_Text.insert(END,'State : %s' % nm[host].state()+'\n') # nm[host].state()获取主机的状态 |up|down|unknow|skipped|
112 for proto in nm[host].all_protocols(): # nm[host].all_protocols获取执行的协议['tcp','udp']
113 #print('-----------------------------------------------------')
114 self.result_data_Text.insert(END,'protocol : %s' % proto+'\n') # 输出执行的协议
115 lport = nm[host][proto].keys() # 获取目标主机所开放的端口赋值给lport
116 # lport.sort()
117 #print('')
118 for port in lport: # 将lport赋值给port并遍历
119 self.result_data_Text.insert(END,'port : %s\tstate : %s' % (port, nm[host][proto][port]['state']+'\n')) # 输出扫描结果
120 self.result_data_Text.insert(END, ret)
121 self.write_log_to_Text("INFO:str_trans_to_md5 success")
122
123 # 设置窗口
124 def set_init_window(self):
125 self.init_window_name.title("扫描器") # 窗口名
126 # self.init_window_name.geometry('320x160+10+10') #290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置
127 self.init_window_name.geometry('1300x800')
128 # self.init_window_name["bg"] = "pink" #窗口背景色,其他背景色见:blog.csdn.net/chl0000/article/details/7657887
129 # self.init_window_name.attributes("-alpha",0.9) #虚化,值越小虚化程度越高
130 # 标签
131 self.init_data_label = Label(self.init_window_name, text="请输入IP")
132 self.init_data_label.grid(row=0, column=0)
133 self.result_data_label = Label(self.init_window_name, text="扫描结果")
134 self.result_data_label.grid(row=0, column=12)
135 self.log_label = Label(self.init_window_name, text="日志")
136 self.log_label.grid(row=12, column=0)
137 # 文本框
138 self.init_data_Text = Text(self.init_window_name, width=67, height=15) # 原始数据录入框
139 self.init_data_Text.grid(row=1, column=0, rowspan=10, columnspan=10)
140 self.result_data_Text = Text(self.init_window_name, width=70, height=49) # 处理结果展示
141 self.result_data_Text.grid(row=1, column=12, rowspan=15, columnspan=10)
142 self.log_data_Text = Text(self.init_window_name, width=66, height=9) # 日志框
143 self.log_data_Text.grid(row=13, column=0, columnspan=10)
144 # 按钮
145 self.str_trans_to_md5_button = Button(self.init_window_name, text="扫描开始", bg="lightblue", width=10,command=self.set_init_saomiao) # 调用内部方法 加()为直接调用
146 self.str_trans_to_md5_button.grid(row=1, column=11)
147 self.str_trans_to_md1_button = Button(self.init_window_name, text="自扫", bg="lightblue", width=10,command=self.set_init_zisao) # 调用内部方法 加()为直接调用
148 self.str_trans_to_md1_button.grid(row=10, column=11)
149 self.str_trans_to_md2_button = Button(self.init_window_name, text="域名", bg="lightblue", width=10,command=self.set_int_DS) # 调用内部方法 加()为直接调用
150 self.str_trans_to_md2_button.grid(row=5, column=11)
151
152 # 获取当前时间
153 def get_current_time(self):
154 current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
155 return current_time
156
157 # 日志动态打印
158 def write_log_to_Text(self, logmsg):
159 global LOG_LINE_NUM
160 current_time = self.get_current_time()
161 logmsg_in = str(current_time) + " " + str(logmsg) + "\n" # 换行
162 if LOG_LINE_NUM <= 7:
163 self.log_data_Text.insert(END, logmsg_in)
164 LOG_LINE_NUM = LOG_LINE_NUM + 1
165 else:
166 self.log_data_Text.delete(1.0, 2.0)
167 self.log_data_Text.insert(END, logmsg_in)
168
169
170 def gui_start():
171 init_window = Tk() # 实例化出一个父窗口
172 ZMJ_PORTAL = MY_GUI(init_window)
173 # 设置根窗口默认属性
174 ZMJ_PORTAL.set_init_window()
175
176 init_window.mainloop() # 父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示
177
178
179 gui_start()

自扫

有助思考,以及后面的参考。

最新文章

  1. wepack+sass+vue 入门教程(二)
  2. p/invoke碎片--对数组的封送处理
  3. Controller的生命周期是Transient还是PerWebRequest?
  4. Loadrunner脚本录制常见问题整理
  5. 学习了一下javascript的模块化编程
  6. OpenLDAP与phpldapadmin的搭建
  7. python实现查找指定文件
  8. Magento PDF发票,支持中文,以及修改的办法
  9. 利用JDK的中Proxy动态代理实现Spring的AOP技术
  10. jmeter之配置文件介绍
  11. 自定义可判断选项是否正确listbox
  12. UVALIVE 3026 Period
  13. 关于JSP异常的处理
  14. javascript中的一些基本方法收藏
  15. 学习接水系统(java+thread线程)
  16. 前端入门10-JavaScript语法之对象
  17. 转:对UI自动化测试的一些感悟
  18. oracle SQL多表查询
  19. SD Consultant Year End Activities
  20. ASP.NET MVC 3 Razor 语法

热门文章

  1. python爬虫cookies jar与字典转换
  2. 根据Query的名字查找是那个CLF逻辑中使用
  3. Vue 使用Lodop进行标签(条码)打印
  4. django连接ubuntu22下的mysql8
  5. Ubuntu 18.04 安装基本应用
  6. astrocut:切割fitsfile
  7. VS code 安装后gdb调试无法显示STL内容的问题
  8. firefox用于web安全测试的插件[转]
  9. 三星电子的KNOX安全技术难以满足企业BYOD控管需求
  10. select标签如何实现 每个option传递多个值