Spaces:
Paused
Paused
| # -*- coding: utf-8 -*- | |
| """ | |
| Created on Sun Dec 18 21:43:54 2022 | |
| @author: amaer | |
| """ | |
| import numpy as np | |
| from ModelTEC import * | |
| from ipywidgets import HTML | |
| class Cheakscenario: | |
| rateerror=0 | |
| PrintFuri=True | |
| def __init__(self,ob=None,sequensed=None): | |
| self.obTECSoft=ob | |
| self.lensoft=len(ob.obMP.Classes) | |
| self.inintlist() | |
| self.onsequens=sequensed | |
| def inintlist(self): | |
| self.listsoftware=np.zeros((self.lensoft,5)) | |
| self.Counter=0 | |
| def createtable(self,row,stat,index=0): | |
| st='<table border="1" style="" ><tr style="background-color:'+stat[0]+'; color:#fff"><th style="text-align:center" >Tactic Name</th><th style="text-align:center" >Technique Name</th></tr>' | |
| for ob in row: | |
| st+='<tr><td style="text-align:center" >'+ob[0]+'</td><td style="text-align:center" >'+ob[1]+'</td></tr>' | |
| st+='<tr style="background-color:'+stat[0]+'; color:#fff"><td colspan = "2" style="text-align:center" >attack scenario status (' | |
| st+=''+ stat[1] +' ) </td></tr>' | |
| return st+'</table>' | |
| def getScenario(self,itmes,k=0,index=0): | |
| stat=self.getAStatescenario(k,index) | |
| if Cheakscenario.PrintFuri==False and stat[1]=='Failure':return None | |
| rowd=[] | |
| for ob in itmes: | |
| if ob.strip() !='': | |
| itms=ob.split("*->") | |
| rowd.append([itms[0],itms[1]]) | |
| return rowd,stat,k | |
| def process(self,path,cinput,isclean=True): | |
| itmes=path.split("=> ") | |
| pathT=self.getpathTech(itmes) | |
| if isclean: | |
| da=self.obTECSoft.clean_dataT([pathT+' ' +cinput+" use "]) | |
| else: | |
| da=[cinput] | |
| # print(pathT,da) | |
| if(len(da)>0): | |
| try: | |
| feat=self.obTECSoft.obMP.obVec.transform(da) | |
| pyd=self.obTECSoft.Model.predict_proba(feat) | |
| self.listsoftware[:,4]+=np.array(pyd[0]) | |
| #for i in range(self.lensoft): | |
| # self.listsoftware[i,4]=pyd[0][i] | |
| index=np.argmax(pyd) | |
| k=pyd[0][index]*100+Cheakscenario.rateerror | |
| row=self.getScenario(itmes,k,index) | |
| if row is not None and len(row[0])>0: | |
| self.Counter+=1 | |
| if self.onsequens is not None: | |
| self.onsequens((row,pyd[0])) | |
| return row,pyd[0] | |
| except: pass | |
| return None | |
| def print_table(self,path,cinput): | |
| # self.obTECSoft.ChangeModel(ob='svmL') | |
| rows=self.process(path, cinput) | |
| if rows is not None : | |
| row,pa=rows | |
| td=self.createtable(row[0],row[1],self.Counter) | |
| print('---------------------------scenario (',self.Counter,')------------------------------') | |
| # display(HTML(td)) | |
| return rows | |
| def getAStatescenario(self,k,index): | |
| if k>=70: | |
| self.listsoftware[index][0]+=1 | |
| return ('#04AA6D','Success') | |
| if k>=60: | |
| self.listsoftware[index][1]+=1 | |
| return ('#1ec7c3','close to success') | |
| if k>=30: | |
| self.listsoftware[index][2]+=1 | |
| return ('#fb4bd1','Initi') | |
| self.listsoftware[index][3]+=1 | |
| return ('#e91c07','Failure') | |
| def getpathTech(self,items): | |
| path=' use ' | |
| for ob in items: | |
| if ob.strip() !='': | |
| itms=ob.split("*->") | |
| path+=' '+itms[1] | |
| return path | |