python检测挖矿特征的几种方式
电脑性能上:
①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检测挖矿特征的几种方式的更多相关文章
- 【转】python之配置日志的几种方式
[转]python之配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用 ...
- Python调用API接口的几种方式 数据库 脚本
Python调用API接口的几种方式 2018-01-08 gaoeb97nd... 转自 one_day_day... 修改 微信分享: 相信做过自动化运维的同学都用过API接口来完成某些动作.AP ...
- python获取公网ip的几种方式
python获取公网ip的几种方式 转 https://blog.csdn.net/conquerwave/article/details/77666226 from urllib2 import u ...
- Python调用API接口的几种方式
Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍py ...
- 检测对象类型的两种方式,constructor属性和instanceof
//本例是为了记录检测对象类型的两种方式,即constructor属性和instanceof操作符.详见<高三>P145 function Person(name, age, ...
- Python实现微信支付(三种方式)
Python实现微信支付(三种方式) 关注公众号"轻松学编程"了解更多. 如果需要python SDk源码,可以加我微信[1257309054] 在文末有二维码. 一.准备环境 1 ...
- Python中字符串拼接的三种方式
在Python中,我们经常会遇到字符串的拼接问题,在这里我总结了三种字符串的拼接方式: 1.使用加号(+)号进行拼接 加号(+)号拼接是我第一次学习Python常用的方法,我们只需要把我们要加 ...
- python之配置logging的几种方式
作为开发者,我们可以通过以下3中方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文 ...
- Python实现Singleton模式的几种方式
使用python实现设计模式中的单例模式.单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的.本文将简要介绍一下python中实现单例模式的几种常见方式和原理.一方面可以加深对pyt ...
随机推荐
- 深度学习面试题10:二维卷积(Full卷积、Same卷积、Valid卷积、带深度的二维卷积)
目录 二维Full卷积 二维Same卷积 二维Valid卷积 三种卷积类型的关系 具备深度的二维卷积 具备深度的张量与多个卷积核的卷积 参考资料 二维卷积的原理和一维卷积类似,也有full卷积.sam ...
- 关于Delphi中二维数组赋初始值
dctb:array[1..2,1..38] of Single=((0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ...
- Python 3.8.0 final¶ Release date: 2019-10-14
https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0 Core and Builtins bpo-38469: Fixed ...
- python 设计模式之原型模式 Prototype Pattern
#引入 例子1: 孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来. 例子2:寄个快递下面是一个邮寄快递的场景:“给我寄个快递.”顾客说.“寄往什么地方?寄给……?”你问.“和上次差不多一样,只是邮 ...
- TextView: android:ellipsize="marquee" 跑马灯效果无效的问题
今天练习的时候想实现一个文字的跑马灯效果,本来想自己手动实现的,不过突然想起来android里的TextView属性似乎自带了这个效果,叫: android:ellipsize ,平时都是把它的属性值 ...
- 树莓派 more
树莓派 rusthttps://tech.iotcomeon.com/2018/06/tech/deploy/515/sudo curl https://sh.rustup.rs -sSf | sh ...
- Java基础 Scanner 使用nextLine接收字符串
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- 从0开始学爬虫3之xpath的介绍和使用
从0开始学爬虫3之xpath的介绍和使用 Xpath:一种HTML和XML的查询语言,它能在XML和HTML的树状结构中寻找节点 安装xpath: pip install lxml HTML 超文本标 ...
- asp乱码问题
UTF-8编码的话:在ASP脚本顶部加入<%@Language="vbscript" Codepage="65001"%>以及再在<head& ...
- rs-enumerate-devices data
realsense rs2::context ctx; auto devicelist = ctx.query_devices(); if (devicelist.size() > 0) { r ...