From e4425f8116f01aa769f51d50fdc2b10e63f7e23d Mon Sep 17 00:00:00 2001 From: wanglihui <949764788@qq.com> Date: Fri, 20 Aug 2021 15:10:10 +0800 Subject: [PATCH] =?UTF-8?q?tsgv08=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 - .../zdjizhi/common/DosDetectionThreshold.java | 93 ------ .../com/zdjizhi/etl/ParseStaticThreshold.java | 163 ----------- .../com/zdjizhi/utils/HttpClientUtils.java | 268 ------------------ .../java/com/zdjizhi/common/HttpTest.java | 7 - src/test/java/com/zdjizhi/common/IpTest.java | 84 ------ 6 files changed, 621 deletions(-) delete mode 100644 src/main/java/com/zdjizhi/common/DosDetectionThreshold.java delete mode 100644 src/main/java/com/zdjizhi/etl/ParseStaticThreshold.java delete mode 100644 src/main/java/com/zdjizhi/utils/HttpClientUtils.java delete mode 100644 src/test/java/com/zdjizhi/common/HttpTest.java delete mode 100644 src/test/java/com/zdjizhi/common/IpTest.java 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))); - - */ - } -}