Commit 10fb02a4 by 钱炳权

kitty信息能够存储

parent 267c45e2
package com.example.fuzzControll.aop;
import com.example.fuzzControll.annotion.NeedCutBefore;
import com.example.fuzzControll.exception.mysqlException.MysqlException;
import com.example.fuzzControll.exception.testException.AflnetException;
import com.example.fuzzControll.tools.system.GlobalClass;
import com.example.fuzzControll.tools.system.SystemRunningParams;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
@Aspect
@Component
@Slf4j
public class afterAop implements Ordered {
@Pointcut(value = "@annotation(com.example.fuzzControll.annotion.NeedCutAfter)")
private void afterCut() {
}
@Around("afterCut()")
public void after(JoinPoint point) throws Throwable {
Signature signature = point.getSignature();
MethodSignature methodSignature = null;
if (!(signature instanceof MethodSignature)) {
throw new IllegalArgumentException("该注解只能用于方法");
}
methodSignature = (MethodSignature) signature;
Object target = point.getTarget();
Method currentMethod = null;
try {
currentMethod = target.getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());
} catch (NoSuchMethodException e) {
log.error("NoSuchMethod!");
e.printStackTrace();
throw new RuntimeException(e);
}
NeedCutBefore logotype = currentMethod.getAnnotation(NeedCutBefore.class);
/*相关处理逻辑,负责数据存入*/
switch (logotype.name()) {
case "aflnet":
// aflnet(logotype.function());
break;
case "kitty":
// kittyAfter(logotype.function());
break;
default:
throw new AflnetException("Cut error: There is no name of anotation!");
}
}
@Override
public int getOrder() {
return 3;
}
}
package com.example.fuzzControll.aop;
import com.example.fuzzControll.annotion.NeedCutAround;
import com.example.fuzzControll.annotion.NeedCutBefore;
import com.example.fuzzControll.constents.MissionStateEnum;
import com.example.fuzzControll.constents.TableClassEnum;
import com.example.fuzzControll.domain.po.MissionInfo;
import com.example.fuzzControll.exception.mysqlException.MysqlException;
import com.example.fuzzControll.exception.testException.AflnetException;
import com.example.fuzzControll.exception.testException.KittyException;
import com.example.fuzzControll.tools.system.GlobalClass;
import com.example.fuzzControll.tools.system.SystemRunningParams;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Aspect
@Component
@Slf4j
public class aroundAop implements Ordered {
@Pointcut(value = "@annotation(com.example.fuzzControll.annotion.NeedCutAround)")
private void aroundCut() {
}
@Around("aroundCut()")
public Map<String, List<String>> around(ProceedingJoinPoint point) throws Throwable {
Signature signature = point.getSignature();
MethodSignature methodSignature = null;
if (!(signature instanceof MethodSignature)) {
throw new IllegalArgumentException("该注解只能用于方法");
}
methodSignature = (MethodSignature) signature;
Object target = point.getTarget();
Method currentMethod = target.getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());
NeedCutAround logotype = currentMethod.getAnnotation(NeedCutAround.class);
/*aflnet相关处理逻辑,负责数据存入*/
switch (logotype.name()) {
case "aflnet":
return null;
// aflnetAround(logotype.function());
case "kitty":
return kittyAround(logotype.function(), point);
default:
return null;
}
}
private Map<String, List<String>> kittyAround(String function, ProceedingJoinPoint point) {
Object result = null;
if (function == null || "".equals(function)) {
throw new AflnetException("There is no value in function!");
}
if ("generation".equals(function)) {
/*运行前处理*/
/*存入kitty启动时的任务信息*/
try {
int missionId = GlobalClass.missionInfoMapper.selectTopMissionId() + 1;
SystemRunningParams.kittyMissionId = missionId;
MissionInfo missionInfo = new MissionInfo(missionId, TableClassEnum.KITTY_RESULT.getTableId(), new Date(), SystemRunningParams.kittyData.get("missionName"),
MissionStateEnum.RUNNING.getStateCode(), 0L);
GlobalClass.missionInfoMapper.insertMission(missionInfo);
} catch (Exception e) {
e.printStackTrace();
throw new MysqlException("Kitty start backup failed!");
}
SystemRunningParams.testTimeMessage.get("kitty").put("start", System.currentTimeMillis());
/*放行方法*/
try {
result = point.proceed();
} catch (Throwable e) {
e.printStackTrace();
throw new KittyException("Kitty run error!");
}
/*运行后方法*/
if (function == null || "".equals(function)) {
throw new AflnetException("There is no value in function!");
}
if ("startBackup".equals(function)) {
/*存入kitty结束时的任务信息*/
try {
SystemRunningParams.testTimeMessage.get("kitty").put("end", System.currentTimeMillis());
int missionId = SystemRunningParams.kittyMissionId;
Long runTime = SystemRunningParams.testTimeMessage.get("kitty").get("end") - SystemRunningParams.testTimeMessage.get("kitty").get("start");
GlobalClass.missionInfoMapper.updateMission(MissionStateEnum.DONE.getStateCode(), runTime, missionId);//更新该次任务的执行时间;
} catch (Exception e) {
e.printStackTrace();
throw new MysqlException("Kitty start backup failed!");
}
}
}
if (result == null) {
throw new KittyException("Result is null!");
}
System.out.println(result);
return (Map<String, List<String>>) result;
}
@Override
public int getOrder() {
return 2;
}
}
...@@ -23,6 +23,7 @@ import org.aspectj.lang.reflect.MethodSignature; ...@@ -23,6 +23,7 @@ import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
...@@ -34,25 +35,18 @@ import static com.example.fuzzControll.tools.system.GlobalClass.aflnetPersistenc ...@@ -34,25 +35,18 @@ import static com.example.fuzzControll.tools.system.GlobalClass.aflnetPersistenc
@Aspect @Aspect
@Component @Component
@Slf4j @Slf4j
public class IntegrationAop implements Ordered { public class beforeAop implements Ordered{
SingleCmdTools singleCmdTools = new SingleCmdTools(); SingleCmdTools singleCmdTools = new SingleCmdTools();
@Pointcut(value = "@annotation(com.example.fuzzControll.annotion.NeedCutBefore)") @Pointcut(value = "@annotation(com.example.fuzzControll.annotion.NeedCutBefore)||@within(com.example.fuzzControll.annotion.NeedCutBefore)")
private void beforCut() { private void beforeCut() {
} }
@Pointcut(value = "@annotation(com.example.fuzzControll.annotion.NeedCutBefore)")
private void afterCut() {
}
@Pointcut(value = "@annotation(com.example.fuzzControll.annotion.NeedCutBefore)")
private void aroundCut() {
}
/** /**
* 用于aflnet测试相关的数据库操作 * 用于aflnet测试相关的数据库操作
*/ */
@Before("beforCut()") @Before("beforeCut()")
private void before(JoinPoint point) { private void before(JoinPoint point) {
/*负责获取反射对象*/ /*负责获取反射对象*/
Signature signature = point.getSignature(); Signature signature = point.getSignature();
...@@ -77,41 +71,13 @@ public class IntegrationAop implements Ordered { ...@@ -77,41 +71,13 @@ public class IntegrationAop implements Ordered {
aflnet(logotype.function()); aflnet(logotype.function());
break; break;
case "kitty": case "kitty":
kitty(logotype.function()); // kitty(logotype.function());
break; break;
default: default:
throw new AflnetException("Cut error: There is no name of anotation!"); throw new AflnetException("Cut error: There is no name of anotation!");
} }
} }
@Around("aroundCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
Signature signature = point.getSignature();
MethodSignature methodSignature = null;
if (!(signature instanceof MethodSignature)) {
throw new IllegalArgumentException("该注解只能用于方法");
}
methodSignature = (MethodSignature) signature;
Object target = point.getTarget();
Method currentMethod = target.getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());
NeedCutBefore logotype = currentMethod.getAnnotation(NeedCutBefore.class);
// if (datasource != null) {
// DataSourceContextHolder.setDataSourceType(logotype.name());
// log.debug("设置数据源为:" + datasource.name());
// } else {
// DataSourceContextHolder.setDataSourceType(DSEnum.DATA_SOURCE_CORE);
// log.debug("设置数据源为:dataSourceCore");
// }
// try {
return point.proceed();
// } finally {
// log.debug("清空数据源信息!");
// DataSourceContextHolder.clearDataSourceType();
// }
}
private void aflnet(String function) { private void aflnet(String function) {
if (function == null || "".equals(function)) { if (function == null || "".equals(function)) {
...@@ -145,7 +111,7 @@ public class IntegrationAop implements Ordered { ...@@ -145,7 +111,7 @@ public class IntegrationAop implements Ordered {
} }
/*存入压缩包*/ /*存入压缩包*/
while (files.contains(fileZipName) && flag == 0) {//当前存在压缩包,且没有存过才存入,循环是等待压缩完成 todo 感觉这里后期会出现问题 while (files.contains(fileZipName) && flag == 0) {//当前存在压缩包,且没有存过才存入,循环是等待压缩完成 todo 感觉这里后期会出现问题
flag = aflnetPersistenceService.aflnetResultBackup(fileZipName, 1, flag = aflnetPersistenceService.aflnetResultBackup(fileZipName, 0,
SystemRunningParams.testTimeMessage.get("aflnet").get("end") - SystemRunningParams.testTimeMessage.get("aflnet").get("start")); SystemRunningParams.testTimeMessage.get("aflnet").get("end") - SystemRunningParams.testTimeMessage.get("aflnet").get("start"));
} }
/*清除生成的文件*/ /*清除生成的文件*/
...@@ -168,11 +134,30 @@ public class IntegrationAop implements Ordered { ...@@ -168,11 +134,30 @@ public class IntegrationAop implements Ordered {
} }
private void kitty(String function) { private void kitty(String function) {
//todo 四种测试无法同时运行,因为只存了一个missionName
if (function == null || "".equals(function)) {
throw new AflnetException("There is no value in function!");
} }
if ("startBackup".equals(function)) {
/*存入kitty启动时的任务信息*/
try {
int missionId = GlobalClass.missionInfoMapper.selectTopMissionId() + 1;
SystemRunningParams.kittyMissionId = missionId;
GlobalClass.missionInfoMapper.insertMission(new MissionInfo(missionId, TableClassEnum.KITTY_RESULT.getTableId(), new Date(), SystemRunningParams.kittyData.get("missionName"),
MissionStateEnum.RUNNING.getStateCode(), 0L));
} catch (Exception e) {
e.printStackTrace();
throw new MysqlException("Kitty start backup failed!");
}
}
// }else if("afterBackup".equals(function)){
//
// }
}
@Override @Override
public int getOrder() { public int getOrder() {
return 1; return 1;
} }
} }
...@@ -2,8 +2,10 @@ package com.example.fuzzControll.conf; ...@@ -2,8 +2,10 @@ package com.example.fuzzControll.conf;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration @Configuration
@EnableFeignClients @EnableFeignClients
@EnableAspectJAutoProxy(proxyTargetClass = true,exposeProxy = true)
public class SystemConfig { public class SystemConfig {
} }
...@@ -5,8 +5,9 @@ package com.example.fuzzControll.constents; ...@@ -5,8 +5,9 @@ package com.example.fuzzControll.constents;
*/ */
public enum TableClassEnum { public enum TableClassEnum {
AFLNET("alfnetResult",1), AFLNET("alfnetResult",1),
KITTY_PACKAGE("kittyPackageFile",2), KITTY_RESULT("kittyResult",2),
KITTY_RESULT("kittyResult",3); KITTY_PACKAGE("kittyPackageFile",3);
private String tableName; private String tableName;
private int tableId; private int tableId;
......
package com.example.fuzzControll.controller.testController; package com.example.fuzzControll.controller.testController;
import com.example.fuzzControll.annotion.NeedCutBefore;
import com.example.fuzzControll.exception.testException.CmdException; import com.example.fuzzControll.exception.testException.CmdException;
import com.example.fuzzControll.exception.testException.FuzzException; import com.example.fuzzControll.exception.testException.FuzzException;
import com.example.fuzzControll.domain.vo.AjaxResult; import com.example.fuzzControll.domain.vo.AjaxResult;
...@@ -8,6 +9,7 @@ import com.example.fuzzControll.service.GenerateMethodService; ...@@ -8,6 +9,7 @@ import com.example.fuzzControll.service.GenerateMethodService;
import com.example.fuzzControll.service.MutationService; import com.example.fuzzControll.service.MutationService;
import com.example.fuzzControll.service.ProtocolTemplateService; import com.example.fuzzControll.service.ProtocolTemplateService;
import com.example.fuzzControll.service.VulnerabilityTypeService; import com.example.fuzzControll.service.VulnerabilityTypeService;
import com.example.fuzzControll.tools.system.SystemRunningParams;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -39,7 +41,8 @@ public class KittyController { ...@@ -39,7 +41,8 @@ public class KittyController {
*/ */
@RequestMapping(value = "/protocolTemplate", method = RequestMethod.POST) @RequestMapping(value = "/protocolTemplate", method = RequestMethod.POST)
public AjaxResult protocolTemplate(@RequestBody TestEntity testEntity) { public AjaxResult protocolTemplate(@RequestBody TestEntity testEntity) {
try {//todo missionId try {
SystemRunningParams.kittyData.put("missionName",testEntity.getTestClassName());
Map<String, List<String>> result = protocolTemplateService.generation(testEntity,1); Map<String, List<String>> result = protocolTemplateService.generation(testEntity,1);
return AjaxResult.success(result == null ? "模板文件生成未成功运行!第三方接口可能存在问题。" : result); return AjaxResult.success(result == null ? "模板文件生成未成功运行!第三方接口可能存在问题。" : result);
} catch (CmdException | FuzzException e) { } catch (CmdException | FuzzException e) {
...@@ -54,7 +57,7 @@ public class KittyController { ...@@ -54,7 +57,7 @@ public class KittyController {
@RequestMapping(value = "/generate", method = RequestMethod.POST) @RequestMapping(value = "/generate", method = RequestMethod.POST)
public AjaxResult generate(@RequestBody TestEntity testEntity) { public AjaxResult generate(@RequestBody TestEntity testEntity) {
try { try {
//todo 需要传入missionId SystemRunningParams.kittyData.put("missionName",testEntity.getTestClassName());
Map<String, List<String>> result = generateMethodService.generation(testEntity,1); Map<String, List<String>> result = generateMethodService.generation(testEntity,1);
return AjaxResult.success(result == null ? "生成方法未成功运行!第三方接口可能存在问题。" : result); return AjaxResult.success(result == null ? "生成方法未成功运行!第三方接口可能存在问题。" : result);
} catch (CmdException | FuzzException e) { } catch (CmdException | FuzzException e) {
...@@ -69,6 +72,7 @@ public class KittyController { ...@@ -69,6 +72,7 @@ public class KittyController {
@RequestMapping(value = "/mutation", method = RequestMethod.POST) @RequestMapping(value = "/mutation", method = RequestMethod.POST)
public AjaxResult mutation(@RequestBody TestEntity testEntity) { public AjaxResult mutation(@RequestBody TestEntity testEntity) {
try { try {
SystemRunningParams.kittyData.put("missionName",testEntity.getTestClassName());
Map<String, List<String>> result = mutationService.generation(testEntity,1); Map<String, List<String>> result = mutationService.generation(testEntity,1);
return AjaxResult.success(result == null ? "mutationTest未成功运行!第三方接口可能存在问题。" : result); return AjaxResult.success(result == null ? "mutationTest未成功运行!第三方接口可能存在问题。" : result);
} catch (CmdException | FuzzException e) { } catch (CmdException | FuzzException e) {
...@@ -83,6 +87,7 @@ public class KittyController { ...@@ -83,6 +87,7 @@ public class KittyController {
@RequestMapping(value = "/vulnerabilityType", method = RequestMethod.POST) @RequestMapping(value = "/vulnerabilityType", method = RequestMethod.POST)
public AjaxResult vulnerability(@RequestBody TestEntity testEntity) { public AjaxResult vulnerability(@RequestBody TestEntity testEntity) {
try { try {
SystemRunningParams.kittyData.put("missionName",testEntity.getTestClassName());
Map<String, List<String>> result = vulnerabilityTypeService.generation(testEntity,1); Map<String, List<String>> result = vulnerabilityTypeService.generation(testEntity,1);
return AjaxResult.success(result == null ? "漏洞类型未成功运行!第三方接口可能存在问题。" : result); return AjaxResult.success(result == null ? "漏洞类型未成功运行!第三方接口可能存在问题。" : result);
} catch (CmdException | FuzzException e) { } catch (CmdException | FuzzException e) {
......
package com.example.fuzzControll.exception.testException;
import com.example.fuzzControll.exception.BaseException;
public class KittyException extends BaseException {
private static final long serialVersionUID = 1L;
public KittyException(String defaultMessage) {
super(defaultMessage, "kitty");
}
}
...@@ -38,9 +38,9 @@ public class FuzzLogServiceImpl implements FuzzLogService { ...@@ -38,9 +38,9 @@ public class FuzzLogServiceImpl implements FuzzLogService {
switch (missionInfo.getTableId()) { switch (missionInfo.getTableId()) {
case 1: case 1:
return downloadAflnetFile(missionInfo); return downloadAflnetFile(missionInfo);
case 2:
return downloadKittyProtocalFile(missionInfo);
case 3: case 3:
return downloadKittyProtocalFile(missionInfo);
case 2:
return downloadKittyOtherMethodFile(missionInfo); return downloadKittyOtherMethodFile(missionInfo);
default: default:
throw new IllegalAccessException("Invalid mission!"); throw new IllegalAccessException("Invalid mission!");
......
package com.example.fuzzControll.service.impl; package com.example.fuzzControll.service.impl;
import com.example.fuzzControll.annotion.NeedCutAround;
import com.example.fuzzControll.annotion.NeedCutBefore;
import com.example.fuzzControll.conf.KittyProperties; import com.example.fuzzControll.conf.KittyProperties;
import com.example.fuzzControll.exception.testException.CmdException; import com.example.fuzzControll.exception.testException.CmdException;
import com.example.fuzzControll.exception.testException.FuzzException; import com.example.fuzzControll.exception.testException.FuzzException;
import com.example.fuzzControll.domain.bo.TestEntity; import com.example.fuzzControll.domain.bo.TestEntity;
import com.example.fuzzControll.service.GenerateMethodService; import com.example.fuzzControll.service.GenerateMethodService;
import com.example.fuzzControll.tools.test.CmdTools; import com.example.fuzzControll.tools.test.TestCmdTools;
import com.example.fuzzControll.tools.test.TestTools; import com.example.fuzzControll.tools.test.TestTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -17,11 +19,12 @@ import java.util.Map; ...@@ -17,11 +19,12 @@ import java.util.Map;
@Service @Service
@Slf4j @Slf4j
public class GenerateMethodServiceImpl implements GenerateMethodService { public class GenerateMethodServiceImpl implements GenerateMethodService {
CmdTools cmdTools = new CmdTools(); TestCmdTools cmdTools = new TestCmdTools();
@Autowired @Autowired
KittyProperties kitty; KittyProperties kitty;
@Override @Override
@NeedCutAround(name ="kitty",function = "generation")
public Map<String, List<String>> generation(TestEntity testEntity,int missionId) throws FuzzException, CmdException { public Map<String, List<String>> generation(TestEntity testEntity,int missionId) throws FuzzException, CmdException {
String cmd = parseParameters(testEntity); String cmd = parseParameters(testEntity);
if (cmd.isEmpty()) { if (cmd.isEmpty()) {
......
...@@ -8,7 +8,7 @@ import com.example.fuzzControll.domain.bo.KittyDataParams; ...@@ -8,7 +8,7 @@ import com.example.fuzzControll.domain.bo.KittyDataParams;
import com.example.fuzzControll.domain.vo.KittyResult; import com.example.fuzzControll.domain.vo.KittyResult;
import com.example.fuzzControll.domain.vo.KittyPackageFile; import com.example.fuzzControll.domain.vo.KittyPackageFile;
import com.example.fuzzControll.service.KittyFuzzPersistenceService; import com.example.fuzzControll.service.KittyFuzzPersistenceService;
import com.example.fuzzControll.tools.test.CmdTools; import com.example.fuzzControll.tools.test.TestCmdTools;
import com.example.fuzzControll.tools.file.FileTools; import com.example.fuzzControll.tools.file.FileTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -23,7 +23,7 @@ public class KittyFuzzPersistenceServiceImpl implements KittyFuzzPersistenceServ ...@@ -23,7 +23,7 @@ public class KittyFuzzPersistenceServiceImpl implements KittyFuzzPersistenceServ
@Autowired @Autowired
KittyMapper kittyMapper; KittyMapper kittyMapper;
FileTools fileTools = new FileTools(); FileTools fileTools = new FileTools();
CmdTools cmdTools = new CmdTools(); TestCmdTools cmdTools = new TestCmdTools();
@Autowired @Autowired
KittyProperties kittyProperties; KittyProperties kittyProperties;
......
package com.example.fuzzControll.service.impl; package com.example.fuzzControll.service.impl;
import com.example.fuzzControll.annotion.NeedCutAfter;
import com.example.fuzzControll.annotion.NeedCutAround;
import com.example.fuzzControll.annotion.NeedCutBefore;
import com.example.fuzzControll.conf.KittyProperties; import com.example.fuzzControll.conf.KittyProperties;
import com.example.fuzzControll.constents.MutationConstent; import com.example.fuzzControll.constents.MutationConstent;
import com.example.fuzzControll.exception.testException.CmdException; import com.example.fuzzControll.exception.testException.CmdException;
import com.example.fuzzControll.exception.testException.FuzzException; import com.example.fuzzControll.exception.testException.FuzzException;
import com.example.fuzzControll.domain.bo.TestEntity; import com.example.fuzzControll.domain.bo.TestEntity;
import com.example.fuzzControll.service.MutationService; import com.example.fuzzControll.service.MutationService;
import com.example.fuzzControll.tools.test.CmdTools; import com.example.fuzzControll.tools.test.TestCmdTools;
import com.example.fuzzControll.tools.test.TestTools; import com.example.fuzzControll.tools.test.TestTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -18,18 +21,19 @@ import java.util.Map; ...@@ -18,18 +21,19 @@ import java.util.Map;
@Service("mutationService") @Service("mutationService")
@Slf4j @Slf4j
class MutationServiceImpl implements MutationService { class MutationServiceImpl implements MutationService {
CmdTools cmdTools = new CmdTools(); TestCmdTools cmdTools = new TestCmdTools();
@Autowired @Autowired
KittyProperties kitty; KittyProperties kitty;
@Override @Override
public Map<String, List<String>> generation(TestEntity testEntity,int missionId) throws FuzzException, CmdException { @NeedCutAround(name ="kitty",function = "generation")
public Map<String, List<String>> generation(TestEntity testEntity, int missionId) throws FuzzException, CmdException {
String cmd = parseParameters(testEntity); String cmd = parseParameters(testEntity);
if (cmd.isEmpty()) { if (cmd.isEmpty()) {
throw new FuzzException("cmd is null ! The number of parameters does not match!"); throw new FuzzException("cmd is null ! The number of parameters does not match!");
} }
return cmdTools.runProgramCmdAndResult(cmd,"mutation","Mutation-"+testEntity.getTestClassName()); return cmdTools.runProgramCmdAndResult(cmd, "mutation", "Mutation-" + testEntity.getTestClassName());
} }
public String parseParameters(TestEntity testEntity) { public String parseParameters(TestEntity testEntity) {
......
package com.example.fuzzControll.service.impl; package com.example.fuzzControll.service.impl;
import com.example.fuzzControll.annotion.NeedCutAround;
import com.example.fuzzControll.annotion.NeedCutBefore;
import com.example.fuzzControll.conf.KittyProperties; import com.example.fuzzControll.conf.KittyProperties;
import com.example.fuzzControll.constents.CmdConstent; import com.example.fuzzControll.constents.CmdConstent;
import com.example.fuzzControll.constents.ProtocolConstent; import com.example.fuzzControll.constents.ProtocolConstent;
...@@ -8,8 +10,9 @@ import com.example.fuzzControll.exception.testException.CmdException; ...@@ -8,8 +10,9 @@ import com.example.fuzzControll.exception.testException.CmdException;
import com.example.fuzzControll.exception.testException.FuzzException; import com.example.fuzzControll.exception.testException.FuzzException;
import com.example.fuzzControll.domain.bo.TestEntity; import com.example.fuzzControll.domain.bo.TestEntity;
import com.example.fuzzControll.service.ProtocolTemplateService; import com.example.fuzzControll.service.ProtocolTemplateService;
import com.example.fuzzControll.tools.test.CmdTools;
import com.example.fuzzControll.tools.system.GlobalClass; import com.example.fuzzControll.tools.system.GlobalClass;
import com.example.fuzzControll.tools.test.SingleCmdTools;
import com.example.fuzzControll.tools.test.TestCmdTools;
import com.example.fuzzControll.tools.test.TestTools; import com.example.fuzzControll.tools.test.TestTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -21,19 +24,21 @@ import java.util.Map; ...@@ -21,19 +24,21 @@ import java.util.Map;
@Slf4j @Slf4j
@Service @Service
public class ProtocolTemplateImpl implements ProtocolTemplateService { public class ProtocolTemplateImpl implements ProtocolTemplateService {
CmdTools cmdTools = new CmdTools(); SingleCmdTools singleCmdTools = new SingleCmdTools();
TestCmdTools testCmdTools = new TestCmdTools();
@Autowired @Autowired
KittyProperties kitty; KittyProperties kitty;
@Override @Override
public Map<String, List<String>> generation(TestEntity testEntity,int missionId) throws FuzzException, CmdException { @NeedCutAround(name ="kitty",function = "generation")
public Map<String, List<String>> generation(TestEntity testEntity, int missionId) throws FuzzException, CmdException {
/*生成日志前先清除日志*/ /*生成日志前先清除日志*/
cmdTools.runCmd(CmdConstent.DELETE_FILE + GlobalClass.kittyProperties.getLogOutPath(),"delete kittyLogs"); singleCmdTools.runCmd(CmdConstent.DELETE_FILE + GlobalClass.kittyProperties.getLogOutPath(), "delete kittyLogs");
String cmd = parseParameters(testEntity); String cmd = parseParameters(testEntity);
if (cmd == null || cmd.equals("")) { if (cmd == null || "".equals(cmd)) {
throw new FuzzException("cmd is null ! The number of parameters does not match!"); throw new FuzzException("cmd is null ! The number of parameters does not match!");
} }
return cmdTools.runProgramCmdAndResult(cmd,"protocolTemplate","ProtocolTemplate-"+testEntity.getTestClassName()); return testCmdTools.runProgramCmdAndResult(cmd, "protocolTemplate", "ProtocolTemplate-" + testEntity.getTestClassName());
} }
public String parseParameters(TestEntity testEntity) throws FuzzException { public String parseParameters(TestEntity testEntity) throws FuzzException {
...@@ -184,7 +189,7 @@ public class ProtocolTemplateImpl implements ProtocolTemplateService { ...@@ -184,7 +189,7 @@ public class ProtocolTemplateImpl implements ProtocolTemplateService {
} catch (Exception e) { } catch (Exception e) {
log.error("mqtt参数解析失败!"); log.error("mqtt参数解析失败!");
} }
return kitty.getVenvPath() + " " + kitty.getPath() + ProtocolConstent.MQTT + " " + ip + " " + port+ " " + topic+ " " + username+ " " + password; return kitty.getVenvPath() + " " + kitty.getPath() + ProtocolConstent.MQTT + " " + ip + " " + port + " " + topic + " " + username + " " + password;
} }
private String coapCmd(TestEntity testEntity) { private String coapCmd(TestEntity testEntity) {
...@@ -201,7 +206,7 @@ public class ProtocolTemplateImpl implements ProtocolTemplateService { ...@@ -201,7 +206,7 @@ public class ProtocolTemplateImpl implements ProtocolTemplateService {
} catch (Exception e) { } catch (Exception e) {
log.error("coap参数解析失败!"); log.error("coap参数解析失败!");
} }
return kitty.getVenvPath() + " " + kitty.getPath() + ProtocolConstent.COAP + " " + ip + " " + port+ " " + path; return kitty.getVenvPath() + " " + kitty.getPath() + ProtocolConstent.COAP + " " + ip + " " + port + " " + path;
} }
private String doipCmd(TestEntity testEntity) { private String doipCmd(TestEntity testEntity) {
...@@ -269,7 +274,7 @@ public class ProtocolTemplateImpl implements ProtocolTemplateService { ...@@ -269,7 +274,7 @@ public class ProtocolTemplateImpl implements ProtocolTemplateService {
} catch (Exception e) { } catch (Exception e) {
log.error("amqp参数解析失败!"); log.error("amqp参数解析失败!");
} }
return kitty.getVenvPath() + " " + kitty.getPath() + ProtocolConstent.AMQP + " " + ip + " " + port+ " " + queue+ " " + exchange+ " " + routing_key; return kitty.getVenvPath() + " " + kitty.getPath() + ProtocolConstent.AMQP + " " + ip + " " + port + " " + queue + " " + exchange + " " + routing_key;
} }
private String tirpCmd(TestEntity testEntity) { private String tirpCmd(TestEntity testEntity) {
......
...@@ -5,7 +5,7 @@ import com.example.fuzzControll.constents.CmdConstent; ...@@ -5,7 +5,7 @@ import com.example.fuzzControll.constents.CmdConstent;
import com.example.fuzzControll.exception.testException.CmdException; import com.example.fuzzControll.exception.testException.CmdException;
import com.example.fuzzControll.exception.fileExcption.FileException; import com.example.fuzzControll.exception.fileExcption.FileException;
import com.example.fuzzControll.service.SeedFileService; import com.example.fuzzControll.service.SeedFileService;
import com.example.fuzzControll.tools.test.CmdTools; import com.example.fuzzControll.tools.test.TestCmdTools;
import com.example.fuzzControll.tools.file.FileTools; import com.example.fuzzControll.tools.file.FileTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -17,7 +17,7 @@ import java.util.List; ...@@ -17,7 +17,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class SeedFileServiceImpl implements SeedFileService { public class SeedFileServiceImpl implements SeedFileService {
CmdTools cmdTools = new CmdTools(); TestCmdTools cmdTools = new TestCmdTools();
FileTools fileTools = new FileTools(); FileTools fileTools = new FileTools();
@Autowired @Autowired
AflnetProperties properties; AflnetProperties properties;
......
...@@ -8,8 +8,7 @@ import com.example.fuzzControll.exception.testException.CmdException; ...@@ -8,8 +8,7 @@ import com.example.fuzzControll.exception.testException.CmdException;
import com.example.fuzzControll.domain.bo.CmdStartParams; import com.example.fuzzControll.domain.bo.CmdStartParams;
import com.example.fuzzControll.service.AflnetPersistenceService; import com.example.fuzzControll.service.AflnetPersistenceService;
import com.example.fuzzControll.service.TestService; import com.example.fuzzControll.service.TestService;
import com.example.fuzzControll.tools.test.CmdTools; import com.example.fuzzControll.tools.test.TestCmdTools;
import com.example.fuzzControll.tools.system.GlobalClass;
import com.example.fuzzControll.tools.test.TestControlTools; import com.example.fuzzControll.tools.test.TestControlTools;
import com.example.fuzzControll.tools.system.SystemRunningParams; import com.example.fuzzControll.tools.system.SystemRunningParams;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -19,14 +18,13 @@ import org.springframework.stereotype.Service; ...@@ -19,14 +18,13 @@ import org.springframework.stereotype.Service;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
@Service("testService") @Service("testService")
@Slf4j @Slf4j
public class TestServiceImpl implements TestService { public class TestServiceImpl implements TestService {
@Autowired @Autowired
CmdTools cmdTools; TestCmdTools cmdTools;
@Autowired @Autowired
AflnetPersistenceService aflnetPersistenceService; AflnetPersistenceService aflnetPersistenceService;
......
package com.example.fuzzControll.service.impl; package com.example.fuzzControll.service.impl;
import com.example.fuzzControll.annotion.NeedCutAround;
import com.example.fuzzControll.annotion.NeedCutBefore;
import com.example.fuzzControll.conf.KittyProperties; import com.example.fuzzControll.conf.KittyProperties;
import com.example.fuzzControll.exception.testException.CmdException; import com.example.fuzzControll.exception.testException.CmdException;
import com.example.fuzzControll.exception.testException.FuzzException; import com.example.fuzzControll.exception.testException.FuzzException;
import com.example.fuzzControll.domain.bo.TestEntity; import com.example.fuzzControll.domain.bo.TestEntity;
import com.example.fuzzControll.service.VulnerabilityTypeService; import com.example.fuzzControll.service.VulnerabilityTypeService;
import com.example.fuzzControll.tools.test.CmdTools; import com.example.fuzzControll.tools.test.TestCmdTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -16,11 +18,12 @@ import java.util.Map; ...@@ -16,11 +18,12 @@ import java.util.Map;
@Slf4j @Slf4j
@Service("vulnerabilityTypeService") @Service("vulnerabilityTypeService")
public class VulnerabilityTypeServiceImpl implements VulnerabilityTypeService { public class VulnerabilityTypeServiceImpl implements VulnerabilityTypeService {
CmdTools cmdTools = new CmdTools(); TestCmdTools cmdTools = new TestCmdTools();
@Autowired @Autowired
KittyProperties kitty; KittyProperties kitty;
@Override @Override
@NeedCutAround(name ="kitty",function = "generation")
public Map<String, List<String>> generation(TestEntity testEntity,int missionId) throws FuzzException, CmdException { public Map<String, List<String>> generation(TestEntity testEntity,int missionId) throws FuzzException, CmdException {
String cmd = parseParameters(testEntity); String cmd = parseParameters(testEntity);
if (cmd.isEmpty()) { if (cmd.isEmpty()) {
......
...@@ -7,6 +7,7 @@ import com.example.fuzzControll.mapper.KittyMapper; ...@@ -7,6 +7,7 @@ import com.example.fuzzControll.mapper.KittyMapper;
import com.example.fuzzControll.mapper.MissionInfoMapper; import com.example.fuzzControll.mapper.MissionInfoMapper;
import com.example.fuzzControll.service.AflnetPersistenceService; import com.example.fuzzControll.service.AflnetPersistenceService;
import com.example.fuzzControll.service.KittyFuzzPersistenceService; import com.example.fuzzControll.service.KittyFuzzPersistenceService;
import com.example.fuzzControll.tools.test.TestCmdTools;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
...@@ -20,4 +21,5 @@ public class GlobalClass { ...@@ -20,4 +21,5 @@ public class GlobalClass {
public static AflnetProperties aflnetProperties = (AflnetProperties) SpringContextUtil.getBean("AflnetProperties"); public static AflnetProperties aflnetProperties = (AflnetProperties) SpringContextUtil.getBean("AflnetProperties");
public static AflnetPersistenceService aflnetPersistenceService = (AflnetPersistenceService) SpringContextUtil.getBean("AflnetPersistenceService"); public static AflnetPersistenceService aflnetPersistenceService = (AflnetPersistenceService) SpringContextUtil.getBean("AflnetPersistenceService");
public static MissionInfoMapper missionInfoMapper = (MissionInfoMapper) SpringContextUtil.getBean("MissionInfoMapper"); public static MissionInfoMapper missionInfoMapper = (MissionInfoMapper) SpringContextUtil.getBean("MissionInfoMapper");
public static TestCmdTools testCmdTools = (TestCmdTools) SpringContextUtil.getBean("TestCmdTools");
} }
...@@ -19,9 +19,17 @@ public class SystemRunningParams { ...@@ -19,9 +19,17 @@ public class SystemRunningParams {
*/ */
public static int aflnetMissionId = 0; public static int aflnetMissionId = 0;
/** /**
* 系统中运行的kitty当前missionId
*/
public static int kittyMissionId = 0;
/**
* aflnet运行时数据 * aflnet运行时数据
*/ */
public static ConcurrentHashMap<String, String> aflnetData = new ConcurrentHashMap<>();//当前aflnet任务的数据 public static ConcurrentHashMap<String, String> aflnetData = new ConcurrentHashMap<>();//当前aflnet任务的数据
/**
* kitty运行时数据
*/
public static ConcurrentHashMap<String, String> kittyData = new ConcurrentHashMap<>();//当前kitty任务的数据
public static void init(){ public static void init(){
/*初始化aflnet和kitty时间参数*/ /*初始化aflnet和kitty时间参数*/
testTimeMessage.put("aflnet",new ConcurrentHashMap<>()); testTimeMessage.put("aflnet",new ConcurrentHashMap<>());
......
...@@ -11,7 +11,6 @@ import com.example.fuzzControll.exception.mysqlException.MysqlException; ...@@ -11,7 +11,6 @@ import com.example.fuzzControll.exception.mysqlException.MysqlException;
import com.example.fuzzControll.service.impl.websocketClientServiceImpl; import com.example.fuzzControll.service.impl.websocketClientServiceImpl;
import com.example.fuzzControll.tools.system.GlobalClass; import com.example.fuzzControll.tools.system.GlobalClass;
import com.example.fuzzControll.tools.system.SystemRunningParams; import com.example.fuzzControll.tools.system.SystemRunningParams;
import com.example.fuzzControll.tools.test.TestControlTools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -19,16 +18,13 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -19,16 +18,13 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.bouncycastle.asn1.x500.style.RFC4519Style.l;
//todo need modify //todo need modify
@Slf4j @Slf4j
@Component @Component("TestCmdTools")
public class CmdTools { public class TestCmdTools {
Boolean send = false; Boolean send = false;
Boolean show = true; Boolean show = true;
...@@ -58,7 +54,7 @@ public class CmdTools { ...@@ -58,7 +54,7 @@ public class CmdTools {
* 运行需要后台运行cmd * 运行需要后台运行cmd
* 通过websocket返回数据 * 通过websocket返回数据
*/ */
@NeedCutBefore(name ="aflnet",function = "startBackup") @NeedCutBefore(name = "aflnet", function = "startBackup")
public void runProgramCmd(String cmd, String outputFileName) throws AflnetException { public void runProgramCmd(String cmd, String outputFileName) throws AflnetException {
try { try {
Process process = Runtime.getRuntime().exec(cmd);//执行模糊测试指令 Process process = Runtime.getRuntime().exec(cmd);//执行模糊测试指令
...@@ -68,7 +64,7 @@ public class CmdTools { ...@@ -68,7 +64,7 @@ public class CmdTools {
process.waitFor(); process.waitFor();
log.info("Aflnet cmd have been run."); log.info("Aflnet cmd have been run.");
} catch (Exception e) { } catch (Exception e) {
log.error("alfnet run error!:"+e.getMessage()); log.error("alfnet run error!:" + e.getMessage());
throw new AflnetException("Aflnet run error"); throw new AflnetException("Aflnet run error");
} }
} }
...@@ -82,7 +78,6 @@ public class CmdTools { ...@@ -82,7 +78,6 @@ public class CmdTools {
List<String> out = Collections.synchronizedList(new ArrayList<String>()); List<String> out = Collections.synchronizedList(new ArrayList<String>());
List<String> error = Collections.synchronizedList(new ArrayList<String>()); List<String> error = Collections.synchronizedList(new ArrayList<String>());
try { try {
SystemRunningParams.testTimeMessage.get("kitty").put("start",System.currentTimeMillis());
Process process = Runtime.getRuntime().exec(cmd); Process process = Runtime.getRuntime().exec(cmd);
printMessageByProgramCmd(process.getInputStream(), out); printMessageByProgramCmd(process.getInputStream(), out);
printMessageByProgramCmd(process.getErrorStream(), error); printMessageByProgramCmd(process.getErrorStream(), error);
...@@ -99,7 +94,6 @@ public class CmdTools { ...@@ -99,7 +94,6 @@ public class CmdTools {
/*新开一个线程存入数据*/ /*新开一个线程存入数据*/
List<String> finalOut = out; List<String> finalOut = out;
List<String> finalError = error; List<String> finalError = error;
SystemRunningParams.testTimeMessage.get("kitty").put("end",System.currentTimeMillis());
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
...@@ -132,6 +126,7 @@ public class CmdTools { ...@@ -132,6 +126,7 @@ public class CmdTools {
/** /**
* 错误输出 * 错误输出
*
* @param input * @param input
* @param result * @param result
* @return * @return
...@@ -176,6 +171,7 @@ public class CmdTools { ...@@ -176,6 +171,7 @@ public class CmdTools {
/** /**
* aflnet模糊测试数据键值对返回 * aflnet模糊测试数据键值对返回
*
* @param line * @param line
* @param returnEntity * @param returnEntity
* @return * @return
...@@ -331,7 +327,7 @@ public class CmdTools { ...@@ -331,7 +327,7 @@ public class CmdTools {
@Transactional(rollbackFor = MysqlException.class) @Transactional(rollbackFor = MysqlException.class)
public void dataBackUpTransaction(String caller, List<String> out, List<String> error, String missionName) { public void dataBackUpTransaction(String caller, List<String> out, List<String> error, String missionName) {
int missionId = GlobalClass.missionInfoMapper.selectTopMissionId() + 1; int missionId =SystemRunningParams.kittyMissionId;
try { try {
/*kitty结果存入数据库*/ /*kitty结果存入数据库*/
KittyResult kittyResult = new KittyResult(missionId, out.toString(), error.toString()); KittyResult kittyResult = new KittyResult(missionId, out.toString(), error.toString());
......
...@@ -22,7 +22,10 @@ ...@@ -22,7 +22,10 @@
<result property="runTime" column="runTime" /> <result property="runTime" column="runTime" />
</resultMap> </resultMap>
<sql id="selectMissionInfo"> <sql id="selectMissionInfo">
select id, missionId, createTime,missionName ,state,runTime from missionIdInfo select id, missionId ,createTime,missionName ,state,runTime from missionIdInfo
</sql>
<sql id="selectMissionInfoInDataBase">
select id, missionId,tableId, createTime,missionName ,state,runTime from missionIdInfo
</sql> </sql>
<insert id="insertMission"> <insert id="insertMission">
insert into missionIdInfo(missionId, tableId, createTime, missionName, state, runTime) insert into missionIdInfo(missionId, tableId, createTime, missionName, state, runTime)
...@@ -34,8 +37,8 @@ ...@@ -34,8 +37,8 @@
where missionId = #{missionId} where missionId = #{missionId}
</update> </update>
<select id="selectByMissionId" resultMap="MissionInfoInVo"> <select id="selectByMissionId" resultMap="MissionInfoInVo">
<include refid="selectMissionInfo"/> <include refid="selectMissionInfoInDataBase"/>
and missionId = #{missionId} where missionId = #{missionId}
</select> </select>
<select id="selectMissionInfoList" resultMap="MissionInfoInVo"> <select id="selectMissionInfoList" resultMap="MissionInfoInVo">
<include refid="selectMissionInfo"/> <include refid="selectMissionInfo"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment