电脑性能上:

①cpu和内存使用率(常见):

python 实时得到cpu和内存的使用情况方法_python_脚本之家
https://www.jb51.net/article/141835.htm

②c盘剩余容量(有的挖矿程序会占用c盘大量内存):

Python实现获取磁盘剩余空间的2种方法_python_脚本之家
https://www.jb51.net/article/115604.htm

③直接对已有挖矿进程库进行杀死:

Python3之查看windows下所有进程并杀死指定进程 - Quincy.Coder的博客 - CSDN博客
https://blog.csdn.net/qq_33733970/article/details/80751957

整理并加上其他功能(流量,端口)完成代码如下:

 #!/usr/bin/python3
# coding:utf-8
from tkinter import *
import psutil,linecache,ctypes,wmi
import os,datetime,time,platform,sys,socket def net_is_used(port,ip='127.0.0.1'):#端口检测
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((ip,port))
s.shutdown(2)
print('%s:%d is used' % (ip,port))
return True
except:
print('%s:%d is unused' % (ip,port))
return False def get_network_flow(os):#当前流量特征
if os == "Windows":
c = wmi.WMI()
for interfacePerTcp in c.Win32_PerfRawData_Tcpip_TCPv4():
sentflow = float(interfacePerTcp.SegmentsSentPersec) #已发送的流量
receivedflow = float(interfacePerTcp.SegmentsReceivedPersec) #接收的流量
present_flow = sentflow+receivedflow #算出当前的总流量
time.sleep(1)
for interfacePerTcp in c.Win32_PerfRawData_Tcpip_TCPv4():
sentflow = float(interfacePerTcp.SegmentsSentPersec) #已发送的流量
receivedflow = float(interfacePerTcp.SegmentsReceivedPersec) #接收的流量
per_last_present_flow = sentflow+receivedflow #算出1秒后当前的总流量
present_network_flow = (per_last_present_flow - present_flow)/1024
return "%.2f"%present_network_flow def getMemCpu():
global n
data = psutil.virtual_memory()
total = data.total #总内存,单位为byte
free = data.available #可以内存
memory = "Memory usage:%d"%(int(round(data.percent)))+"%\n"#内存使用率
cpu = "CPU:%0.2f"%psutil.cpu_percent(interval=1)+"%\n"#CPU使用率
if int(round(data.percent))>75 and psutil.cpu_percent(interval=1) > 75:#挖矿一个特征
n=1#☆☆☆阈值
else:
n=0
return memory+cpu def get_free_space_mb(folder):#C盘内存剩余量
if platform.system() == 'Windows':
free_bytes = ctypes.c_ulonglong(0)
ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(folder), None, None, ctypes.pointer(free_bytes))
return free_bytes.value/1024/1024/1024
else:
st = os.statvfs(folder)
return st.f_bavail * st.f_frsize/1024/1024 def on_click():#开始检测按钮函数
global num,n,cont
os = platform.system()
label['text'] = '正在检测···'
info=getMemCpu()
info = info +"C free space:%0.2f"%get_free_space_mb('C:\\') + "G\n"
flow=get_network_flow(os)
if float(flow) > 3000:#病毒一般占用3033KB/s☆☆☆阈值
n=1
info = info + "traffic:" + flow + "KB/s"
conte=linecache.getlines('port.txt')#端口在port文件中
for i in range(len(conte)):#病毒一般占用4位数端口,端口范围可选,或针对端口关闭
if net_is_used(int(conte[i])):
n=1
#if net_is_used(xxx):xxx为指定端口
# n=1
if get_free_space_mb('C:\\') < 1:
n=1
pids = psutil.pids()
cont=linecache.getlines('process.txt')
for j in range(len(cont)):
cont[j]=cont[j][:len(cont[j])-1]
for pid in pids:
p = psutil.Process(pid)
#print(p.name())
for j in range(len(cont)):
if p.name() == cont[j]:
n=1
myfile=open('test.txt','a')
if n==0:
message['text'] = '本系统现未遭受挖矿攻击\n'+info
middle=time.strftime('%Y%m%d%H%M',time.localtime(time.time()))+' normal ' + str("%.2f"%get_free_space_mb('C:\\')) + ' ' + flow
message['bg'] = 'green'
myfile.write('\n'+middle)
if n==1:
message['text'] = '本系统正在遭受挖矿,紧急!\n'+info
middle=time.strftime('%Y%m%d%H%M',time.localtime(time.time()))+' warning '+ str("%.2f"%get_free_space_mb('C:\\')) + ' ' + flow
message['bg'] = 'yellow'
myfile.write('\n'+middle)
myfile.close()
label['text'] = '完成检测!' def on_click2():#读取日志按钮函数
label['text'] = '日志读取'
content=linecache.getlines('test.txt')
logs=''
for i in range(len(content)):
mid=''
mid=content[i][0:4]+'.'+content[i][4:6]+'.'+content[i][6:8]+' '+content[i][8:10]+':'+content[i][10:]
logs=logs+mid
message['text'] = logs def on_click3():#重置按钮函数
message['text'] = ''
label['text'] = '欢迎使用本反挖矿系统'
message['bg'] = 'white' def on_click4():#杀死文件中进程函数
global n,cont
pids = psutil.pids()
#cont=linecache.getlines('process.txt')
for pid in pids:
p = psutil.Process(pid)
#print(p.name())
for j in range(len(cont)):
if p.name() == cont[j]:
cmd = 'taskkill /f /t /im '+ '"'+cont[j]+'"'
os.system(cmd)
message['text'] = '指定文件中进程已清除'
message['bg'] = 'green' n=0
root=Tk(className='反挖矿系统')
root.geometry('400x300')
label = Label(root)
label['text'] = '欢迎使用本反挖矿系统'
message = Label(root,text='')
label.pack()
button = Button(root,text='开始使用',command=on_click)
button.pack()
button2 = Button(root,text='查看日志',command=on_click2)
button2.pack()
button3 = Button(root,text='重置界面',command=on_click3)
button3.pack()
button4 = Button(root,text='杀死进程',command=on_click4)
button4.pack()
message.pack()
root.mainloop()

python检测挖矿特征的几种方式的更多相关文章

  1. 【转】python之配置日志的几种方式

    [转]python之配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用 ...

  2. Python调用API接口的几种方式 数据库 脚本

    Python调用API接口的几种方式 2018-01-08 gaoeb97nd... 转自 one_day_day... 修改 微信分享: 相信做过自动化运维的同学都用过API接口来完成某些动作.AP ...

  3. python获取公网ip的几种方式

    python获取公网ip的几种方式 转 https://blog.csdn.net/conquerwave/article/details/77666226 from urllib2 import u ...

  4. Python调用API接口的几种方式

    Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍py ...

  5. 检测对象类型的两种方式,constructor属性和instanceof

    //本例是为了记录检测对象类型的两种方式,即constructor属性和instanceof操作符.详见<高三>P145        function Person(name, age, ...

  6. Python实现微信支付(三种方式)

    Python实现微信支付(三种方式) 关注公众号"轻松学编程"了解更多. 如果需要python SDk源码,可以加我微信[1257309054] 在文末有二维码. 一.准备环境 1 ...

  7. Python中字符串拼接的三种方式

    在Python中,我们经常会遇到字符串的拼接问题,在这里我总结了三种字符串的拼接方式:     1.使用加号(+)号进行拼接 加号(+)号拼接是我第一次学习Python常用的方法,我们只需要把我们要加 ...

  8. python之配置logging的几种方式

    作为开发者,我们可以通过以下3中方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文 ...

  9. Python实现Singleton模式的几种方式

    使用python实现设计模式中的单例模式.单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的.本文将简要介绍一下python中实现单例模式的几种常见方式和原理.一方面可以加深对pyt ...

随机推荐

  1. Workstation 14 Returns EFI Network Start PXE over IPv4 When Installing New Win10 Guest O/S

    当启动出现“Click any key to boot from DVD”时候,需要键盘点击一下,即可解决. 参考:https://communities.vmware.com/thread/5730 ...

  2. [教程] Packt - Create a Game Environment with Blender and Unity by Darrin Lile

    学习了解如何使用Blender,photoshop和Unity创建自己的游戏环境!了解如何通过比以往更加集成的方式使用Blender和Unity,将自己的游戏设计变为现实.在Unity中创建测试版本 ...

  3. 沃顿商学院的MBA课程

    沃顿商学院的MBA课程,分为必修课和选修课两部分 (一)必修课: 1.领导力:团队合作和领导力的基础 2.营销学:营销管理 3.微观经济学:微观经济基础 4.经济学:管理经济学的高级话题 5.统计学: ...

  4. log4j实现日志自动清理功能

    log4j不支持自动清理功能,但是log4j2版本支持,log4j2是log4j的升级版,比logback先进. log4j升级为log4j2(不需要改动代码)https://blog.csdn.ne ...

  5. git commit之后,撤销 commit

    写完代码后,我们一般这样 git add . //添加所有文件 git commit -m "本功能全部完成" 执行完commit后,想撤回commit,怎么办? 可以执行如下命令 ...

  6. vue---lodash的使用

    Lodash就是这样的一套工具库,它内部封装了诸多对字符串.数组.对象等常见数据类型的处理函数,其中部分是目前ECMAScript尚未制订的规范,但同时被业界所认可的辅助函数.莫倩每天使用npm安装L ...

  7. weui 导航悬浮固定

    <style> .none{display: none} #toolbar { display: flex; justify-content: center; align-items: c ...

  8. 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)

    数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...

  9. intellij tomcat配置

    目录 intellij tomcat配置 @(目录) intellij tomcat配置 如上图标注 1 所示,我们可以切换随时为项目切换不同的容器. 如上图标注 2 所示,我们可以指定给运行的容器设 ...

  10. layer confirm 三种选择按钮

    layer.confirm('请选择是否通过提现?(tips:同意直接打款,驳回不可恢复)', { btn : ['通过-打款','不通过','通过-已打款'], btn1:function(){ a ...