diff --git a/pom.xml b/pom.xml
index 0c4e1fd..9bf8d43 100644
--- a/pom.xml
+++ b/pom.xml
@@ -215,12 +215,6 @@
5.5.2
-
- com.github.seancfoley
- ipaddress
- 5.3.3
-
-
com.zdjizhi
galaxy
diff --git a/src/main/java/com/zdjizhi/common/DosDetectionThreshold.java b/src/main/java/com/zdjizhi/common/DosDetectionThreshold.java
deleted file mode 100644
index c67d3a4..0000000
--- a/src/main/java/com/zdjizhi/common/DosDetectionThreshold.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.zdjizhi.common;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-
-public class DosDetectionThreshold implements Serializable {
- private String profileId;
- private String attackType;
- private ArrayList serverIpList;
- private String serverIpAddr;
- private long packetsPerSec;
- private long bitsPerSec;
- private long sessionsPerSec;
- private int isValid;
-
- @Override
- public String toString() {
- return "DosDetectionThreshold{" +
- "profileId='" + profileId + '\'' +
- ", attackType='" + attackType + '\'' +
- ", serverIpList=" + serverIpList +
- ", serverIpAddr='" + serverIpAddr + '\'' +
- ", packetsPerSec=" + packetsPerSec +
- ", bitsPerSec=" + bitsPerSec +
- ", sessionsPerSec=" + sessionsPerSec +
- ", isValid=" + isValid +
- '}';
- }
-
- public String getProfileId() {
- return profileId;
- }
-
- public void setProfileId(String profileId) {
- this.profileId = profileId;
- }
-
- public String getAttackType() {
- return attackType;
- }
-
- public void setAttackType(String attackType) {
- this.attackType = attackType;
- }
-
- public ArrayList getServerIpList() {
- return serverIpList;
- }
-
- public void setServerIpList(ArrayList serverIpList) {
- this.serverIpList = serverIpList;
- }
-
- public String getServerIpAddr() {
- return serverIpAddr;
- }
-
- public void setServerIpAddr(String serverIpAddr) {
- this.serverIpAddr = serverIpAddr;
- }
-
- public long getPacketsPerSec() {
- return packetsPerSec;
- }
-
- public void setPacketsPerSec(long packetsPerSec) {
- this.packetsPerSec = packetsPerSec;
- }
-
- public long getBitsPerSec() {
- return bitsPerSec;
- }
-
- public void setBitsPerSec(long bitsPerSec) {
- this.bitsPerSec = bitsPerSec;
- }
-
- public long getSessionsPerSec() {
- return sessionsPerSec;
- }
-
- public void setSessionsPerSec(long sessionsPerSec) {
- this.sessionsPerSec = sessionsPerSec;
- }
-
- public int getIsValid() {
- return isValid;
- }
-
- public void setIsValid(int isValid) {
- this.isValid = isValid;
- }
-}
diff --git a/src/main/java/com/zdjizhi/etl/ParseStaticThreshold.java b/src/main/java/com/zdjizhi/etl/ParseStaticThreshold.java
deleted file mode 100644
index 40559ed..0000000
--- a/src/main/java/com/zdjizhi/etl/ParseStaticThreshold.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package com.zdjizhi.etl;
-
-import com.fasterxml.jackson.databind.JavaType;
-import com.zdjizhi.common.CommonConfig;
-import com.zdjizhi.common.DosDetectionThreshold;
-import com.zdjizhi.utils.HttpClientUtils;
-import com.zdjizhi.utils.JsonMapper;
-import inet.ipaddr.IPAddress;
-import inet.ipaddr.IPAddressString;
-import org.apache.flink.shaded.guava18.com.google.common.collect.Range;
-import org.apache.flink.shaded.guava18.com.google.common.collect.TreeRangeMap;
-import org.apache.http.client.utils.URIBuilder;
-import org.apache.http.message.BasicHeader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author wlh
- */
-public class ParseStaticThreshold {
- private static Logger logger = LoggerFactory.getLogger(ParseStaticThreshold.class);
- private static String encryptpwd;
-
- private static JsonMapper jsonMapperInstance = JsonMapper.getInstance();
- private static JavaType hashmapJsonType = jsonMapperInstance.createCollectionType(HashMap.class, String.class, Object.class);
- private static JavaType thresholdType = jsonMapperInstance.createCollectionType(ArrayList.class, DosDetectionThreshold.class);
-
- static {
- //加载加密登录密码
- encryptpwd = getEncryptpwd();
- }
-
- /**
- * 获取加密密码
- */
- private static String getEncryptpwd(){
- String psw = HttpClientUtils.ERROR_MESSAGE;
- try {
- URIBuilder uriBuilder = new URIBuilder(CommonConfig.BIFANG_SERVER_URI);
- HashMap parms = new HashMap<>();
- parms.put("password",CommonConfig.BIFANG_SERVER_PASSWORD);
- HttpClientUtils.setUrlWithParams(uriBuilder,CommonConfig.BIFANG_SERVER_ENCRYPTPWD_PATH,parms);
- String resposeJsonStr = HttpClientUtils.httpGet(uriBuilder.build());
- if (!HttpClientUtils.ERROR_MESSAGE.equals(resposeJsonStr)){
- HashMap resposeMap = jsonMapperInstance.fromJson(resposeJsonStr, hashmapJsonType);
- boolean success = (boolean)resposeMap.get("success");
- if (success){
- HashMap data = jsonMapperInstance.fromJson(jsonMapperInstance.toJson(resposeMap.get("data")), hashmapJsonType);
- psw = data.get("encryptpwd").toString();
- }
- }
- }catch (URISyntaxException e){
- logger.error("构造URI异常",e);
- }catch (Exception e){
- logger.error("获取encryptpwd失败",e);
- }
- return psw;
- }
-
- /**
- * 登录bifang服务,获取token
- * @return token
- */
- private static String loginBifangServer(){
- String token = HttpClientUtils.ERROR_MESSAGE;
- try {
- if (!HttpClientUtils.ERROR_MESSAGE.equals(encryptpwd)){
- URIBuilder uriBuilder = new URIBuilder(CommonConfig.BIFANG_SERVER_URI);
- HashMap parms = new HashMap<>();
- parms.put("username",CommonConfig.BIFANG_SERVER_USER);
- parms.put("password",encryptpwd);
- HttpClientUtils.setUrlWithParams(uriBuilder,CommonConfig.BIFANG_SERVER_LOGIN_PATH,parms);
- String resposeJsonStr = HttpClientUtils.httpPost(uriBuilder.build(), null);
- if (!HttpClientUtils.ERROR_MESSAGE.equals(resposeJsonStr)){
- HashMap resposeMap = jsonMapperInstance.fromJson(resposeJsonStr, hashmapJsonType);
- boolean success = (boolean)resposeMap.get("success");
- if (success){
- HashMap data = jsonMapperInstance.fromJson(jsonMapperInstance.toJson(resposeMap.get("data")), hashmapJsonType);
- token = data.get("token").toString();
- }
- }
- }
- }catch (Exception e){
- logger.error("登录失败,未获取到token ",e);
- }
- return token;
- }
-
- /**
- * 获取静态阈值配置列表
- * @return thresholds
- */
- private static ArrayList getDosDetectionThreshold(){
- ArrayList thresholds = null;
- try {
- URIBuilder uriBuilder = new URIBuilder(CommonConfig.BIFANG_SERVER_URI);
- HttpClientUtils.setUrlWithParams(uriBuilder,CommonConfig.BIFANG_SERVER_POLICY_THRESHOLD_PATH,null);
- String token = loginBifangServer();
- if (!HttpClientUtils.ERROR_MESSAGE.equals(token)){
- BasicHeader authorization = new BasicHeader("Authorization", token);
- String resposeJsonStr = HttpClientUtils.httpGet(uriBuilder.build(), authorization);
- if (!HttpClientUtils.ERROR_MESSAGE.equals(resposeJsonStr)){
- HashMap resposeMap = jsonMapperInstance.fromJson(resposeJsonStr, hashmapJsonType);
- boolean success = (boolean)resposeMap.get("success");
- if (success){
- HashMap data = jsonMapperInstance.fromJson(jsonMapperInstance.toJson(resposeMap.get("data")), hashmapJsonType);
- thresholds = jsonMapperInstance.fromJson(jsonMapperInstance.toJson(data.get("list")), thresholdType);
- logger.info("获取到静态阈值配置{}条",thresholds.size());
- }
- }
- }
- }catch (Exception e){
- logger.error("获取静态阈值配置失败,请检查bifang服务或登录配置信息 ",e);
- }
- return thresholds;
- }
-
- /**
- * 基于静态阈值构建threshold RangeMap,k:IP段或具体IP,v:配置信息
- * @return threshold RangeMap
- */
- public static TreeRangeMap createStaticThreshold(){
- TreeRangeMap thresholdRangeMap = null;
- try {
- ArrayList dosDetectionThreshold = getDosDetectionThreshold();
- if (dosDetectionThreshold != null && !dosDetectionThreshold.isEmpty()){
- thresholdRangeMap = TreeRangeMap.create();
- for (DosDetectionThreshold threshold:dosDetectionThreshold){
- ArrayList serverIpList = threshold.getServerIpList();
- for (String sip:serverIpList){
- IPAddressString ipAddressString = new IPAddressString(sip);
- if (ipAddressString.isIPAddress()){
- IPAddress address = ipAddressString.getAddress();
- thresholdRangeMap.put(Range.closed(address.getLower(),address.getUpper()),threshold);
- }
- }
- }
- }
- }catch (Exception e){
- logger.error("构建threshold RangeMap失败",e);
- }
- return thresholdRangeMap;
- }
-
- public static void main(String[] args) {
-
- TreeRangeMap staticThreshold = createStaticThreshold();
- Map, DosDetectionThreshold> rangeDosDetectionThresholdMap = staticThreshold.asMapOfRanges();
- Set> ranges = rangeDosDetectionThresholdMap.keySet();
- for (Range range:ranges){
- System.out.println(range+"--"+rangeDosDetectionThresholdMap.get(range));
- }
-
- }
-
-
-}
diff --git a/src/main/java/com/zdjizhi/utils/HttpClientUtils.java b/src/main/java/com/zdjizhi/utils/HttpClientUtils.java
deleted file mode 100644
index d358300..0000000
--- a/src/main/java/com/zdjizhi/utils/HttpClientUtils.java
+++ /dev/null
@@ -1,268 +0,0 @@
-package com.zdjizhi.utils;
-
-import com.zdjizhi.common.CommonConfig;
-import org.apache.http.*;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpRequestRetryHandler;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.*;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.client.utils.URIBuilder;
-import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.HttpHostConnectException;
-import org.apache.http.entity.ByteArrayEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.apache.http.message.BasicHeaderElementIterator;
-import org.apache.http.protocol.HTTP;
-import org.apache.http.util.EntityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLHandshakeException;
-import java.io.IOException;
-import java.io.InterruptedIOException;
-import java.net.URI;
-import java.net.UnknownHostException;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-
-/**
- * http client工具类
- */
-public class HttpClientUtils {
- /** 全局连接池对象 */
- private static final PoolingHttpClientConnectionManager CONN_MANAGER = new PoolingHttpClientConnectionManager();
-
- private static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);
- public static final String ERROR_MESSAGE = "-1";
-
- /*
- * 静态代码块配置连接池信息
- */
- static {
-
- // 设置最大连接数
- CONN_MANAGER.setMaxTotal(CommonConfig.HTTP_POOL_MAX_CONNECTION);
- // 设置每个连接的路由数
- CONN_MANAGER.setDefaultMaxPerRoute(CommonConfig.HTTP_POOL_MAX_PER_ROUTE);
-
- }
-
- /**
- * 获取Http客户端连接对象
- * @return Http客户端连接对象
- */
- private static CloseableHttpClient getHttpClient() {
- // 创建Http请求配置参数
- RequestConfig requestConfig = RequestConfig.custom()
- // 获取连接超时时间
- .setConnectionRequestTimeout(CommonConfig.HTTP_POOL_REQUEST_TIMEOUT)
- // 请求超时时间
- .setConnectTimeout(CommonConfig.HTTP_POOL_CONNECT_TIMEOUT)
- // 响应超时时间
- .setSocketTimeout(CommonConfig.HTTP_POOL_RESPONSE_TIMEOUT)
- .build();
-
- /*
- * 测出超时重试机制为了防止超时不生效而设置
- * 如果直接放回false,不重试
- * 这里会根据情况进行判断是否重试
- */
- HttpRequestRetryHandler retry = (exception, executionCount, context) -> {
- if (executionCount >= 3) {// 如果已经重试了3次,就放弃
- return false;
- }
- if (exception instanceof NoHttpResponseException) {// 如果服务器丢掉了连接,那么就重试
- return true;
- }
- if (exception instanceof SSLHandshakeException) {// 不要重试SSL握手异常
- return false;
- }
- if (exception instanceof UnknownHostException) {// 目标服务器不可达
- return false;
- }
- if (exception instanceof ConnectTimeoutException) {// 连接被拒绝
- return false;
- }
- if (exception instanceof HttpHostConnectException) {// 连接被拒绝
- return false;
- }
- if (exception instanceof SSLException) {// ssl握手异常
- return false;
- }
- if (exception instanceof InterruptedIOException) {// 超时
- return true;
- }
- HttpClientContext clientContext = HttpClientContext.adapt(context);
- HttpRequest request = clientContext.getRequest();
- // 如果请求是幂等的,就再次尝试
- return !(request instanceof HttpEntityEnclosingRequest);
- };
-
-
- ConnectionKeepAliveStrategy myStrategy = (response, context) -> {
- HeaderElementIterator it = new BasicHeaderElementIterator
- (response.headerIterator(HTTP.CONN_KEEP_ALIVE));
- while (it.hasNext()) {
- HeaderElement he = it.nextElement();
- String param = he.getName();
- String value = he.getValue();
- if (value != null && "timeout".equalsIgnoreCase(param)) {
- return Long.parseLong(value) * 1000;
- }
- }
- return 60 * 1000;//如果没有约定,则默认定义时长为60s
- };
-
- // 创建httpClient
- return HttpClients.custom()
- // 把请求相关的超时信息设置到连接客户端
- .setDefaultRequestConfig(requestConfig)
- // 把请求重试设置到连接客户端
- .setRetryHandler(retry)
- .setKeepAliveStrategy(myStrategy)
- // 配置连接池管理对象
- .setConnectionManager(CONN_MANAGER)
- .build();
- }
-
-
- /**
- * GET请求
- *
- * @param uri 请求地
- * @return message
- */
- public static String httpGet(URI uri, Header... headers) {
- String msg = ERROR_MESSAGE;
-
- // 获取客户端连接对象
- CloseableHttpClient httpClient = getHttpClient();
- CloseableHttpResponse response = null;
-
- try {
- logger.info("http get uri {}",uri);
- // 创建GET请求对象
- HttpGet httpGet = new HttpGet(uri);
-
- if (StringUtil.isNotEmpty(headers)) {
- for (Header h : headers) {
- httpGet.addHeader(h);
- logger.info("request header : {}",h);
- }
- }
- // 执行请求
- response = httpClient.execute(httpGet);
- int statusCode = response.getStatusLine().getStatusCode();
- // 获取响应实体
- HttpEntity entity = response.getEntity();
- // 获取响应信息
- msg = EntityUtils.toString(entity, "UTF-8");
-
- if (statusCode != HttpStatus.SC_OK) {
- logger.error("Http get content is :{}" , msg);
- }
-
- } catch (ClientProtocolException e) {
- logger.error("协议错误: {}", e.getMessage());
- } catch (ParseException e) {
- logger.error("解析错误: {}", e.getMessage());
- } catch (IOException e) {
- logger.error("IO错误: {}",e.getMessage());
- } finally {
- if (null != response) {
- try {
- EntityUtils.consume(response.getEntity());
- response.close();
- } catch (IOException e) {
- logger.error("释放链接错误: {}", e.getMessage());
-
- }
- }
- }
-
- return msg;
- }
- /**
- * POST 请求
- * @param uri uri参数
- * @param requestBody 请求体
- * @return post请求返回结果
- */
- public static String httpPost(URI uri, String requestBody, Header... headers) {
- String msg = ERROR_MESSAGE;
- // 获取客户端连接对象
- CloseableHttpClient httpClient = getHttpClient();
-
- // 创建POST请求对象
- CloseableHttpResponse response = null;
- try {
-
- logger.info("http post uri:{}, http post body:{}", uri, requestBody);
-
- HttpPost httpPost = new HttpPost(uri);
- httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
- if (StringUtil.isNotEmpty(headers)) {
- for (Header h : headers) {
- httpPost.addHeader(h);
- logger.info("request header : {}",h);
- }
- }
-
- if(StringUtil.isNotBlank(requestBody)) {
- byte[] bytes = requestBody.getBytes(StandardCharsets.UTF_8);
- httpPost.setEntity(new ByteArrayEntity(bytes));
- }
-
- response = httpClient.execute(httpPost);
- int statusCode = response.getStatusLine().getStatusCode();
- // 获取响应实体
- HttpEntity entity = response.getEntity();
- // 获取响应信息
- msg = EntityUtils.toString(entity, "UTF-8");
-
- if (statusCode != HttpStatus.SC_OK) {
- logger.error("Http post content is :{}" , msg);
- }
- } catch (ClientProtocolException e) {
- logger.error("协议错误: {}", e.getMessage());
- } catch (ParseException e) {
- logger.error("解析错误: {}", e.getMessage());
- } catch (IOException e) {
- logger.error("IO错误: {}", e.getMessage());
- } finally {
- if (null != response) {
- try {
- EntityUtils.consumeQuietly(response.getEntity());
- response.close();
- } catch (IOException e) {
- logger.error("释放链接错误: {}", e.getMessage());
-
- }
- }
- }
- return msg;
- }
-
- /**
- * 拼装url
- * url ,参数map
- */
- public static void setUrlWithParams(URIBuilder uriBuilder,String path, Map params) {
- try {
- uriBuilder.setPath(path);
- if (params != null && !params.isEmpty()){
- for (Map.Entry kv : params.entrySet()) {
- uriBuilder.setParameter(kv.getKey(),kv.getValue());
- }
- }
- } catch (Exception e) {
- logger.error("拼接url出错,uri : {}, path : {},参数: {}",uriBuilder.toString(),path,params);
- }
- }
-
-}
diff --git a/src/test/java/com/zdjizhi/common/HttpTest.java b/src/test/java/com/zdjizhi/common/HttpTest.java
deleted file mode 100644
index 59185ac..0000000
--- a/src/test/java/com/zdjizhi/common/HttpTest.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.zdjizhi.common;
-
-public class HttpTest {
- public static void main(String[] args) throws Exception {
-
- }
-}
diff --git a/src/test/java/com/zdjizhi/common/IpTest.java b/src/test/java/com/zdjizhi/common/IpTest.java
deleted file mode 100644
index 830f7bf..0000000
--- a/src/test/java/com/zdjizhi/common/IpTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.zdjizhi.common;
-
-import inet.ipaddr.Address;
-import inet.ipaddr.AddressStringException;
-import inet.ipaddr.IPAddress;
-import inet.ipaddr.IPAddressString;
-import inet.ipaddr.format.util.AddressTrieMap;
-import inet.ipaddr.format.util.AssociativeAddressTrie;
-import inet.ipaddr.ipv4.IPv4Address;
-import inet.ipaddr.ipv4.IPv4AddressAssociativeTrie;
-import org.apache.flink.shaded.guava18.com.google.common.collect.Range;
-import org.apache.flink.shaded.guava18.com.google.common.collect.TreeRangeMap;
-
-import java.util.Arrays;
-import java.util.HashMap;
-
-public class IpTest {
- public static void main(String[] args) throws Exception {
- IPv4AddressAssociativeTrie trie = new IPv4AddressAssociativeTrie<>();
-
- IPAddress str1 = new IPAddressString("1.2.3.4").getAddress();
- IPAddress str2 = new IPAddressString("10.0.0.0/15").getAddress();
- IPAddress str3 = new IPAddressString("25.4.2.0/23").getAddress();
- IPAddress str4 = new IPAddressString("192.168.8.0/21").getAddress();
- IPAddress str5 = new IPAddressString("240.0.0.0/4").getAddress();
- IPAddress str6 = new IPAddressString("fc00::0/64").getAddress();
- IPAddress str7 = new IPAddressString("fc00::10:1").getAddress();
-
- TreeRangeMap rangeMap = TreeRangeMap.create();
- rangeMap.put(Range.closed(str1.getLower(),str1.getUpper()),1);
- rangeMap.put(Range.closed(str2.getLower(),str2.getUpper()),2);
- rangeMap.put(Range.closed(str3.getLower(),str3.getUpper()),3);
- rangeMap.put(Range.closed(str4.getLower(),str4.getUpper()),4);
- rangeMap.put(Range.closed(str5.getLower(),str5.getUpper()),5);
- rangeMap.put(Range.closed(str6.getLower(),str6.getUpper()),6);
- rangeMap.put(Range.closed(str7.getLower(),str7.getUpper()),7);
-
- IPAddress pv4 = new IPAddressString("255.255.14.255").getAddress();
- IPAddress pv42 = new IPAddressString("1.2.3.4").getAddress();
- IPAddress pv43 = new IPAddressString("fc00::").getAddress();
- IPAddress pv44 = new IPAddressString("fc00::10:1").getAddress();
-
- System.out.println(rangeMap.get(pv4));
- System.out.println(rangeMap.get(pv42));
- System.out.println(rangeMap.get(pv43));
- System.out.println(rangeMap.get(pv44));
-
- /*
- System.out.println(str5.toSequentialRange());
-// System.out.println(str2.contains(new IPAddressString("10.0.0.2")));
-// System.out.println(str5.toAddress().toIPv4().toSequentialRange());
-
-
- trie.put(str1,1);
- trie.put(str2,2);
- trie.put(str3,3);
- trie.put(str4,4);
- trie.put(str5,5);
-
- AddressTrieMap trieMap = new AddressTrieMap<>(trie);
-
-
-
- trieMap.forEach((k,v) -> {
- System.out.println(k.toString() + "--" + v);
- });
-
- System.out.println("-----------------");
-
- trie.forEach((k) -> System.out.println(k.toString()));
-
- System.out.println(str5.contains(pv4));
- System.out.println(trie.contains(pv4));
- System.out.println(trieMap.get(pv4));
- System.out.println(trieMap.containsKey(pv4));
-// System.out.println(trieMap.getRange());
-// IPAddress str3 = new IPAddressString("fc00::10:1").getAddress();
-// IPAddress str4 = new IPAddressString("fc00::10:2/64").getAddress();
-
-// System.out.println(Arrays.toString(str1.mergeToPrefixBlocks(str2,str3,str4)));
-
- */
- }
-}