电脑性能上:

①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. tomcat启动startup.bat一闪而过(分析与解答)

    tomcat启动startup.bat一闪而过(分析与解答) 方法/步骤     在正确配置Tomcat环境变量后,遇到很多次运行startup.bat后,一个窗口一闪而过的.为了分析导致tomcat ...

  2. nodejs五子棋online游戏开发视频教程,客户端cocos creator js

    开发的游戏是五子棋online,网络版的,服务端部分和客户端部分都在这个教程里面,可以看一下目录! 服务器nodejs游戏开发教程 使用Nodejs开发网络服务器 游戏服务端 ,cocos creat ...

  3. 【Tomcat】本地域名访问配置

    原路径:localhost:8080/jsja 1.把8080端口改为80端口 打开%TOMCAT_HOME%/conf/server.xml <Connector connectionTime ...

  4. Java HashSet介绍

    HashSet底层使用HashMap实现.当使用add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value则都是同一个Object对象(该对象我们用不上). ...

  5. 【Java.Regex】用正则表达式查找Java源文件中的注释

    代码: package regex; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.I ...

  6. python try except 出现异常时,except 中如何返回异常的信息字符串

    https://docs.python.org/3/tutorial/errors.html#handling-exceptions https://docs.python.org/3/library ...

  7. Android 自定义View 四个构造函数详解

    https://blog.csdn.net/zhao123h/article/details/52210732 在开发android开发过程中,很多人都会遇到自定义view,一般都需要继承自View类 ...

  8. MacBook Pro设置外接显示器竖屏显示 切换主显示器

    切换主显示器设置 有一些使用 Mac 电脑的用户,比如笔记本用户,可能会由于屏幕太小想外接一个更大的显示器,也或是有多显示输出的需求.当 Mac 电脑上有了多个显示器以后,此时便会有主副显示区之分了. ...

  9. Spring的@ExceptionHandler和@ControllerAdvice统一处理异常

    之前敲代码的时候,避免不了各种try..catch, 如果业务复杂一点, 就会发现全都是try…catch try{ ..........}catch(Exception1 e){ ......... ...

  10. 安装docker报错:https://download.docker.com/linux/centos/7/i386/stable/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"

    如题,执行docker安装命令报错: [root@centos ~]# yum install docker-ce Loaded plugins: fastestmirror, security Se ...