parent
c49cb41146
commit
b669c4b374
|
@ -98,4 +98,9 @@ public interface DisposeAbility {
|
|||
* @return the boolean
|
||||
*/
|
||||
boolean isCarryProtectIp(String ipAddr);
|
||||
|
||||
/**
|
||||
* Period task runtime.
|
||||
*/
|
||||
void periodTaskRuntime();
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.dispose.ability.impl;
|
|||
import com.dispose.ability.DisposeAbility;
|
||||
import com.dispose.common.CommonEnumHandler;
|
||||
import com.dispose.common.DisposeCapacityType;
|
||||
import com.dispose.common.DisposeConfigValue;
|
||||
import com.dispose.common.DisposeObjectType;
|
||||
import com.dispose.common.DpTechAttackType;
|
||||
import com.dispose.common.DpTechConfigValue;
|
||||
|
@ -29,7 +30,9 @@ import org.apache.wss4j.dom.handler.WSHandlerConstants;
|
|||
import javax.xml.ws.BindingProvider;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -48,12 +51,55 @@ public class DpTechAbilityImpl implements DisposeAbility {
|
|||
* The Protect ip v 6.
|
||||
*/
|
||||
private final List<String> protectIpV6 = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* The All cleanup devices.
|
||||
*/
|
||||
private final HashSet<String> allCleanupDevices = new HashSet<>();
|
||||
/**
|
||||
* The Timer cnt.
|
||||
*/
|
||||
private long timerCnt = 0;
|
||||
/**
|
||||
* The Device link status.
|
||||
*/
|
||||
private boolean deviceLinkStatus = false;
|
||||
/**
|
||||
* The Clean type port.
|
||||
*/
|
||||
private AbnormalFlowCleaningServicePortType cleanTypePort;
|
||||
|
||||
/**
|
||||
* Init cleanup devices.
|
||||
*/
|
||||
private void initCleanupDevices() {
|
||||
try {
|
||||
log.info("++++Begging DPTech Get All Detect Devices");
|
||||
String dev = cleanTypePort.getAllProtectDevices();
|
||||
log.info("----Finish DPTech Get All Detect Devices: {}", dev);
|
||||
|
||||
Collections.addAll(allCleanupDevices, dev.split(DisposeConfigValue.SPLIT_CHAR));
|
||||
} catch (Exception ex) {
|
||||
log.error("----Exception DPTech Get All Detect Devices");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Init protection objects.
|
||||
*/
|
||||
private void initProtectionObjects() {
|
||||
try {
|
||||
log.info("++++Begging DPTech Get All Protection Objects");
|
||||
ArrayOfProtectionObjectDataForService ret = cleanTypePort.getAllProtectionObjectFromUMC();
|
||||
|
||||
String dev = cleanTypePort.getAllProtectDevices();
|
||||
log.info("----Finish DPTech Get All Protection Objects: {}", dev);
|
||||
|
||||
Collections.addAll(allCleanupDevices, dev.split(DisposeConfigValue.SPLIT_CHAR));
|
||||
} catch (Exception ex) {
|
||||
log.error("----Exception DPTech Get All Protection Objects");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Init device env.
|
||||
*
|
||||
|
@ -93,6 +139,9 @@ public class DpTechAbilityImpl implements DisposeAbility {
|
|||
//读取超时
|
||||
policy.setReceiveTimeout(DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND);
|
||||
conduit.setClient(policy);
|
||||
|
||||
// 获取所有检测设备
|
||||
initCleanupDevices();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -107,7 +156,8 @@ public class DpTechAbilityImpl implements DisposeAbility {
|
|||
* @return the mul return type
|
||||
*/
|
||||
@Override
|
||||
public MulReturnType<ErrorCode, String> runDispose(String disposeObject, DisposeObjectType objectType, DisposeCapacityType capType,
|
||||
public MulReturnType<ErrorCode, String> runDispose(String disposeObject, DisposeObjectType objectType,
|
||||
DisposeCapacityType capType,
|
||||
NetflowDirection nfDirection,
|
||||
Integer attackType,
|
||||
Long duration) {
|
||||
|
@ -205,15 +255,23 @@ public class DpTechAbilityImpl implements DisposeAbility {
|
|||
*/
|
||||
@Override
|
||||
public boolean getDeviceLinkStatus() {
|
||||
return deviceLinkStatus;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Dev get link status.
|
||||
*/
|
||||
private void devGetLinkStatus() {
|
||||
try {
|
||||
// 获取防护对象接口调用成功认为设备心跳正常
|
||||
cleanTypePort.getAllProtectionObjectFromUMC().getProtectionObjectDataForService();
|
||||
return true;
|
||||
deviceLinkStatus = true;
|
||||
} catch (Exception ex) {
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
|
||||
return false;
|
||||
deviceLinkStatus = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -327,4 +385,22 @@ public class DpTechAbilityImpl implements DisposeAbility {
|
|||
public MulReturnType<ErrorCode, Long> taskStatus(String taskId) {
|
||||
return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, -1L);
|
||||
}
|
||||
|
||||
/**
|
||||
* Period task runtime.
|
||||
*/
|
||||
@Override
|
||||
public void periodTaskRuntime() {
|
||||
log.debug("++++DpTech Period Task Running");
|
||||
|
||||
// 更新防护对象
|
||||
getDisposeDeviceProtectObject();
|
||||
|
||||
// 更新心跳状态
|
||||
if (timerCnt++ % DisposeConfigValue.HEART_PERIOD_OF_SECOND == 0) {
|
||||
devGetLinkStatus();
|
||||
}
|
||||
|
||||
log.debug("----DpTech Period Task Running");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.dispose.ability.impl;
|
|||
|
||||
import com.dispose.ability.DisposeAbility;
|
||||
import com.dispose.common.DisposeCapacityType;
|
||||
import com.dispose.common.DisposeConfigValue;
|
||||
import com.dispose.common.DisposeObjectType;
|
||||
import com.dispose.common.ErrorCode;
|
||||
import com.dispose.common.NetflowDirection;
|
||||
|
@ -38,6 +39,14 @@ public class HaoHanAbilityImpl implements DisposeAbility {
|
|||
* The Url root path.
|
||||
*/
|
||||
private String urlRootPath;
|
||||
/**
|
||||
* The Timer cnt.
|
||||
*/
|
||||
private long timerCnt = 0;
|
||||
/**
|
||||
* The Device link status.
|
||||
*/
|
||||
private boolean deviceLinkStatus = false;
|
||||
|
||||
/**
|
||||
* Init device env.
|
||||
|
@ -153,14 +162,23 @@ public class HaoHanAbilityImpl implements DisposeAbility {
|
|||
*/
|
||||
@Override
|
||||
public boolean getDeviceLinkStatus() {
|
||||
return deviceLinkStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dev get link status.
|
||||
*/
|
||||
private void devGetLinkStatus() {
|
||||
try {
|
||||
// 获取任务信息接口调用成功认为设备心跳正常
|
||||
return (restfulInterface.getCleanTaskStatus(this.urlRootPath, -1) != null);
|
||||
if (restfulInterface.getCleanTaskStatus(this.urlRootPath, -1) != null) {
|
||||
deviceLinkStatus = true;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
|
||||
return false;
|
||||
deviceLinkStatus = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -225,4 +243,19 @@ public class HaoHanAbilityImpl implements DisposeAbility {
|
|||
public MulReturnType<ErrorCode, Long> taskStatus(String taskId) {
|
||||
return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, -1L);
|
||||
}
|
||||
|
||||
/**
|
||||
* Period task runtime.
|
||||
*/
|
||||
@Override
|
||||
public void periodTaskRuntime() {
|
||||
log.debug("++++HaoHan Period Task Running");
|
||||
|
||||
// 更新心跳状态
|
||||
if (timerCnt++ % DisposeConfigValue.HEART_PERIOD_OF_SECOND == 0) {
|
||||
devGetLinkStatus();
|
||||
}
|
||||
|
||||
log.debug("----HaoHan Period Task Running");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.dispose.ability.impl;
|
|||
import cn.hutool.http.HttpResponse;
|
||||
import com.dispose.ability.DisposeAbility;
|
||||
import com.dispose.common.DisposeCapacityType;
|
||||
import com.dispose.common.DisposeConfigValue;
|
||||
import com.dispose.common.DisposeObjectType;
|
||||
import com.dispose.common.ErrorCode;
|
||||
import com.dispose.common.NetflowDirection;
|
||||
|
@ -29,6 +30,14 @@ import javax.servlet.http.HttpServletResponse;
|
|||
@Component
|
||||
@Slf4j
|
||||
public class HuaWeiAbilityImpl implements DisposeAbility {
|
||||
/**
|
||||
* The Timer cnt.
|
||||
*/
|
||||
private long timerCnt = 0;
|
||||
/**
|
||||
* The Device link status.
|
||||
*/
|
||||
private boolean deviceLinkStatus = false;
|
||||
/**
|
||||
* The Restful interface.
|
||||
*/
|
||||
|
@ -270,12 +279,20 @@ public class HuaWeiAbilityImpl implements DisposeAbility {
|
|||
*/
|
||||
@Override
|
||||
public boolean getDeviceLinkStatus() {
|
||||
return deviceLinkStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dev get link status.
|
||||
*/
|
||||
private void devGetLinkStatus() {
|
||||
try {
|
||||
//查询所有的zone接口调用成功认为设备心跳正常
|
||||
String url = urlRootPath + "/allzone";
|
||||
|
||||
if (token == null || token.length() == 0) {
|
||||
return false;
|
||||
deviceLinkStatus = false;
|
||||
return;
|
||||
}
|
||||
|
||||
HttpResponse response = restfulInterface.queryAllZones(url, token);
|
||||
|
@ -286,13 +303,15 @@ public class HuaWeiAbilityImpl implements DisposeAbility {
|
|||
response = restfulInterface.queryAllZones(url, token);
|
||||
}
|
||||
|
||||
return response.getStatus() == HttpServletResponse.SC_OK;
|
||||
if (response.getStatus() == HttpServletResponse.SC_OK) {
|
||||
deviceLinkStatus = true;
|
||||
}
|
||||
} catch (
|
||||
Exception ex) {
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
|
||||
return false;
|
||||
deviceLinkStatus = false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -330,5 +349,20 @@ public class HuaWeiAbilityImpl implements DisposeAbility {
|
|||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Period task runtime.
|
||||
*/
|
||||
@Override
|
||||
public void periodTaskRuntime() {
|
||||
log.debug("++++HuaWei Period Task Running");
|
||||
|
||||
// 更新心跳状态
|
||||
if (timerCnt++ % DisposeConfigValue.HEART_PERIOD_OF_SECOND == 0) {
|
||||
devGetLinkStatus();
|
||||
}
|
||||
|
||||
log.debug("----HuaWei Period Task Running");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.dispose.ability.impl;
|
|||
|
||||
import com.dispose.ability.DisposeAbility;
|
||||
import com.dispose.common.DisposeCapacityType;
|
||||
import com.dispose.common.DisposeConfigValue;
|
||||
import com.dispose.common.DisposeObjectType;
|
||||
import com.dispose.common.ErrorCode;
|
||||
import com.dispose.common.Helper;
|
||||
|
@ -55,6 +56,15 @@ public class PengXinAbilityImpl implements DisposeAbility {
|
|||
* The Task req id.
|
||||
*/
|
||||
private Long taskReqId = System.currentTimeMillis();
|
||||
/**
|
||||
* The Timer cnt.
|
||||
*/
|
||||
private long timerCnt = 0;
|
||||
/**
|
||||
* The Device link status.
|
||||
*/
|
||||
private boolean deviceLinkStatus = false;
|
||||
|
||||
/**
|
||||
* The Url root path.
|
||||
*/
|
||||
|
@ -310,11 +320,19 @@ public class PengXinAbilityImpl implements DisposeAbility {
|
|||
*/
|
||||
@Override
|
||||
public boolean getDeviceLinkStatus() {
|
||||
return deviceLinkStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dev get link status.
|
||||
*/
|
||||
private void devGetLinkStatus() {
|
||||
try {
|
||||
String url = urlRootPath + "dispose_device/information/linkstatus";
|
||||
|
||||
if (token == null || token.length() == 0) {
|
||||
return false;
|
||||
deviceLinkStatus = false;
|
||||
return;
|
||||
}
|
||||
|
||||
ErrorCode err = restfulInterface.getLinkStatus(url, token);
|
||||
|
@ -325,12 +343,14 @@ public class PengXinAbilityImpl implements DisposeAbility {
|
|||
err = restfulInterface.getLinkStatus(url, token);
|
||||
}
|
||||
|
||||
return err == ErrorCode.ERR_OK;
|
||||
if (err == ErrorCode.ERR_OK) {
|
||||
deviceLinkStatus = true;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
|
||||
return false;
|
||||
deviceLinkStatus = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -480,4 +500,22 @@ public class PengXinAbilityImpl implements DisposeAbility {
|
|||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Period task runtime.
|
||||
*/
|
||||
@Override
|
||||
public void periodTaskRuntime() {
|
||||
log.debug("++++PengXin Period Task Running");
|
||||
|
||||
// 更新防护对象
|
||||
getDisposeDeviceProtectObject();
|
||||
|
||||
// 更新心跳状态
|
||||
if (timerCnt++ % DisposeConfigValue.HEART_PERIOD_OF_SECOND == 0) {
|
||||
devGetLinkStatus();
|
||||
}
|
||||
|
||||
log.debug("----PengXin Period Task Running");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,4 +143,12 @@ public class VirtualAbilityImpl implements DisposeAbility {
|
|||
public MulReturnType<ErrorCode, Long> taskStatus(String taskId) {
|
||||
return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, -1L);
|
||||
}
|
||||
|
||||
/**
|
||||
* Period task runtime.
|
||||
*/
|
||||
@Override
|
||||
public void periodTaskRuntime() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -186,6 +186,11 @@ public enum DDoSAttackType implements BaseEnum {
|
|||
*/
|
||||
IGMP_FLOOD(42, "IGMP_FLOOD"),
|
||||
|
||||
|
||||
/**
|
||||
* None attacks d do s attack type.
|
||||
*/
|
||||
NONE_ATTACKS(63, "NONE_ATTACKS"),
|
||||
/**
|
||||
* The All attacks.
|
||||
*/
|
||||
|
@ -224,7 +229,7 @@ public enum DDoSAttackType implements BaseEnum {
|
|||
|
||||
if (types.contains(ALL_ATTACKS)) {
|
||||
for (DDoSAttackType type : DDoSAttackType.values()) {
|
||||
if (type.equals(ALL_ATTACKS)) {
|
||||
if (type.equals(ALL_ATTACKS) || type.equals(NONE_ATTACKS)) {
|
||||
continue;
|
||||
}
|
||||
mask |= (long) 1 << type.getValue();
|
||||
|
@ -249,7 +254,8 @@ public enum DDoSAttackType implements BaseEnum {
|
|||
|
||||
if (Arrays.asList(types).contains(ALL_ATTACKS)) {
|
||||
for (DDoSAttackType type : DDoSAttackType.values()) {
|
||||
if (type.equals(ALL_ATTACKS)) {
|
||||
// 掩码处理跳过所有攻击类型与不指定攻击类型
|
||||
if (type.equals(ALL_ATTACKS) || type.equals(NONE_ATTACKS)) {
|
||||
continue;
|
||||
}
|
||||
mask |= (long) 1 << type.getValue();
|
||||
|
@ -270,8 +276,12 @@ public enum DDoSAttackType implements BaseEnum {
|
|||
* @return the type mask from attack type
|
||||
*/
|
||||
public static Long getTypeMaskFromAttackType(Integer[] types) {
|
||||
// 如果指定了所有攻击类型,选择所有攻击类型
|
||||
if (Arrays.stream(types).anyMatch(v -> ALL_ATTACKS.getValue().equals(v))) {
|
||||
return getTypeMaskFromAttackType(new DDoSAttackType[]{ALL_ATTACKS});
|
||||
} else if (Arrays.stream(types).anyMatch(v -> NONE_ATTACKS.getValue().equals(v))) {
|
||||
// 如果不指定攻击类型
|
||||
return getTypeMaskFromAttackType(new DDoSAttackType[]{NONE_ATTACKS});
|
||||
} else {
|
||||
long mask = 0L;
|
||||
for (int i : types) {
|
||||
|
|
|
@ -58,4 +58,9 @@ public class DisposeConfigValue {
|
|||
* The constant ENABLE_UTEST_MOCK.
|
||||
*/
|
||||
public static volatile boolean ENABLE_UTEST_MOCK = false;
|
||||
|
||||
/**
|
||||
* The constant HEART_PERIOD_OF_SECOND.
|
||||
*/
|
||||
public static long HEART_PERIOD_OF_SECOND = 30;
|
||||
}
|
||||
|
|
|
@ -57,7 +57,13 @@ public enum DpTechAttackType implements BaseEnum {
|
|||
/**
|
||||
* The Host total traffic.
|
||||
*/
|
||||
HOST_TOTAL_TRAFFIC(31, "Host Total Traffic");
|
||||
HOST_TOTAL_TRAFFIC(31, "Host Total Traffic"),
|
||||
|
||||
/**
|
||||
* The Auto attack type.
|
||||
*/
|
||||
AUTO_ATTACK_TYPE(32, "Automatic detect attack type"),
|
||||
;
|
||||
|
||||
/**
|
||||
* The Code.
|
||||
|
@ -130,10 +136,10 @@ public enum DpTechAttackType implements BaseEnum {
|
|||
}
|
||||
|
||||
/**
|
||||
* From ddos attack type value stream.
|
||||
* From ddos attack type value list.
|
||||
*
|
||||
* @param type the type
|
||||
* @return the stream
|
||||
* @return the list
|
||||
*/
|
||||
public static List<DpTechAttackType> fromDdosAttackTypeValue(DDoSAttackType type) {
|
||||
List<DpTechAttackType> attackList = new ArrayList<>();
|
||||
|
@ -204,6 +210,10 @@ public enum DpTechAttackType implements BaseEnum {
|
|||
attackList.addAll(Arrays.asList(DpTechAttackType.values()));
|
||||
break;
|
||||
|
||||
case NONE_ATTACKS:
|
||||
attackList.add(AUTO_ATTACK_TYPE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -54,4 +54,9 @@ public interface DisposeAbilityRouterService {
|
|||
* @return the error code
|
||||
*/
|
||||
ErrorCode verifyDisposeCapacity(Long deviceId, String disposeIp, DisposeCapacityType capacityType);
|
||||
|
||||
/**
|
||||
* Run period task.
|
||||
*/
|
||||
void runPeriodTask();
|
||||
}
|
||||
|
|
|
@ -3,9 +3,9 @@ package com.dispose.service.impl;
|
|||
import com.dispose.ability.DisposeAbility;
|
||||
import com.dispose.ability.impl.DpTechAbilityImpl;
|
||||
import com.dispose.ability.impl.HaoHanAbilityImpl;
|
||||
import com.dispose.ability.impl.HuaWeiAbilityImpl;
|
||||
import com.dispose.ability.impl.PengXinAbilityImpl;
|
||||
import com.dispose.ability.impl.VirtualAbilityImpl;
|
||||
import com.dispose.ability.impl.HuaWeiAbilityImpl;
|
||||
import com.dispose.common.DisposeCapacityType;
|
||||
import com.dispose.common.ErrorCode;
|
||||
import com.dispose.common.HttpType;
|
||||
|
@ -14,6 +14,8 @@ import com.dispose.pojo.entity.DisposeDevice;
|
|||
import com.dispose.pojo.po.AbilityInfo;
|
||||
import com.dispose.service.DisposeAbilityRouterService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
@ -171,6 +173,16 @@ public class DisposeAbilityRouterServiceImpl implements DisposeAbilityRouterServ
|
|||
return ErrorCode.ERR_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run period task.
|
||||
*/
|
||||
@Override
|
||||
@Async("deviceTaskExecutor")
|
||||
@Scheduled(fixedDelay = 1000)
|
||||
public void runPeriodTask() {
|
||||
getAllAbilityDevices().forEach(v -> v.getDb().periodTaskRuntime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets ability device hash key.
|
||||
*
|
||||
|
|
|
@ -57,9 +57,6 @@ public class DeviceManagerTask {
|
|||
((v.getDev().getIpPort() == null || v.getDev().getIpPort().length() == 0) ? "" :
|
||||
":" + v.getDev().getIpPort()),
|
||||
ret.getFirstParam());
|
||||
|
||||
// 更新设备保护对象
|
||||
v.getDb().getDisposeDeviceProtectObject();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue