电脑性能上:

①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. NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤<转>

    原帖地址:https://blog.csdn.net/z6482/article/details/7660748 ------------------------------------------- ...

  2. unity热更新AssetBundle框架设计_框架篇

    目录 第1 章 : AssetBundle框架整体设计 课时1:实战项目开发AB技术问题分析 10:53 课时2:实战项目开发AB技术解决方案 10:24 课时3:AB框架整体设计方案详解 09:45 ...

  3. sql中order by和group by的区别

    order by 和 group by 的区别: 1,order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字段名,可以是多个字段名. 2,group b ...

  4. P1310 表达式的值

    P1310 表达式的值 题解 1.假设有两个布尔变量 x , y  x0表示使得x=0的方案数 x1表示使得x=1的方案数 y0表示使得y=0的方案数 y1表示使得y=1的方案数 | 按位或 & ...

  5. python 设计模式之单例模式 Singleton Pattern

    #引入 一个类被设计出来,就意味着它具有某种行为(方法),属性(成员变量).一般情况下,当我们想使用这个类时,会使用new 关键字,这时候jvm会帮我们构造一个该类的实例.这么做会比较耗费资源. 如果 ...

  6. Centos7迁移fastdfs文件系统

    系统从一个地方迁移到另一个地方,数据保持不变,但是ip地址和网络情况不一样了,最困难的是要迁移的那个地方还么有互联网,这TM就坑了,所以想到将FastDFS存储的目录整体拷贝过去,这个方法简单粗暴,这 ...

  7. Python设计模式之MVC模式

    # -*- coding: utf-8 -*- # author:baoshan quotes = ('A man is not complete until he is married. Then ...

  8. Python3基础 函数 多值参数 元组与字典形式(键值对分别指出)

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  9. 【FreeMarker】Spring MVC与FreeMarker整合(二)

    前一篇介绍了FreeMarker的基本使用,本例介绍Spring MVC与FreeMarker整合 不熟悉项目搭建,可参考 [FreeMarker]FreeMarker快速入门(一) 整合 1.新建S ...

  10. python学习:几种采用的功能实现示例

    1.python 程序退出的几种方式 import sys sys.exit() sys.exit(0) sys.exit(1) 或者 os._exit() 该方法中包含一个参数status,默认为0 ...