summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangwei <[email protected]>2022-06-28 11:33:29 +0800
committerwangwei <[email protected]>2022-06-28 11:35:40 +0800
commit60a091c8c125eb6e8d51411a99f1a56222803196 (patch)
tree8055363109022422337d0c43e51cd632a3a293dd
parent3e1488ae688badaac3d841e2dd079e1658b0b0dd (diff)
fix(SNI推荐):TSG-11097 修复SNI学习不完整问题 *.baidu.com .com356-rc1356-rc1
-rw-r--r--src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java46
-rw-r--r--src/test/java/com/mesalab/qgw/service/TopEntityTest.java9
2 files changed, 32 insertions, 23 deletions
diff --git a/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java b/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java
index e42bf9b8..d4a32643 100644
--- a/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java
+++ b/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java
@@ -96,7 +96,6 @@ public class EntityServiceImp implements EntityService, EnvironmentAware {
public BaseResult getEntityInfo(String param, ComDSLObject comDSLObject) {
BaseResult baseResult;
- String fileSql;
String sql;
if (param.equalsIgnoreCase(EntityQueryType.ACTIVECLIENTIP.getType())) {
setDefaultValue(comDSLObject.getQuery());
@@ -156,7 +155,8 @@ public class EntityServiceImp implements EntityService, EnvironmentAware {
if (BooleanUtil.toBoolean(String.valueOf(item.get("isCDN")))) {
countCDN++;
}
- if (!StringUtil.startsWith(String.valueOf(item.get("ssl_sni")), "*")) {
+ if (!StringUtil.startsWith(String.valueOf(item.get("ssl_sni")), "*")
+ && !StringUtil.startsWith(String.valueOf(item.get("ssl_sni")), "$")) {
item.replace("ssl_sni", "$".concat(String.valueOf(item.get("ssl_sni"))));
}
item.remove("sessions");
@@ -186,31 +186,42 @@ public class EntityServiceImp implements EntityService, EnvironmentAware {
while (iterator.hasNext()) {
Map<String, Object> datum = iterator.next();
String name = String.valueOf(datum.get("ssl_sni"));
- //1. CND filter
- if (inCDN(cnd, name)) {
+ String key = getTopPrivateDomain(name);
+ datum.put("isCDN", false);
+
+ //1. filter exception data
+ if (StringUtil.isBlank(key)) {
+ map.put(name, Lists.newArrayList(datum));
+ continue;
+ }
+ String domain = FormatUtils.getDomain(name);
+
+ //2. filter CND
+ if (inCDN(cnd, domain)) {
datum.put("isCDN", true);
cdnFilter.add(datum);
continue;
}
- datum.put("isCDN", false);
- String key = getTopPrivateDomain(name);
- //2. exception data
- if (StringUtil.isBlank(key)) {
- map.put(name, Lists.newArrayList(datum));
+
+ //3 filter TopPrivateDomain
+ if (key.equalsIgnoreCase(domain)) {
+ datum.put("ssl_sni", domain);
+ map.put("$".concat(domain), Lists.newArrayList(datum));
continue;
}
- //3. first add
+
+ //4. first add
if (StringUtil.isEmpty(map.get(key))) {
- datum.put("ssl_sni", FormatUtils.getDomain(name));
+ datum.put("ssl_sni", domain);
map.put(key, Lists.newArrayList(datum));
continue;
}
- //4. merge
+ //5. merge
List<Map<String, Object>> mapList = map.get(key);
for (Map<String, Object> item : mapList) {
List<String> domainBefore = Splitter.on(".").omitEmptyStrings().splitToList(String.valueOf(item.get("ssl_sni")));
- List<String> domainAfter = Splitter.on(".").omitEmptyStrings().splitToList(FormatUtils.getDomain(name));
+ List<String> domainAfter = Splitter.on(".").omitEmptyStrings().splitToList(domain);
Stack<String> stackBefore = new Stack<>();
Stack<String> stackAfter = new Stack<>();
domainBefore.forEach(stackBefore::push);
@@ -222,7 +233,8 @@ public class EntityServiceImp implements EntityService, EnvironmentAware {
if ("*".equals(levelAfter) || "*".equals(levelBefore)) {
break;
}
- if (!levelBefore.equalsIgnoreCase(levelAfter)) {
+ if (!levelBefore.equalsIgnoreCase(levelAfter)
+ || (stackBefore.isEmpty() || stackAfter.isEmpty())) {
break;
}
stack.push(levelBefore);
@@ -250,13 +262,13 @@ public class EntityServiceImp implements EntityService, EnvironmentAware {
return result;
}
- public boolean inCDN(Map<String, List<String>> cdnMap, String name) {
- String topPrivateDomain = getTopPrivateDomain(name);
+ public boolean inCDN(Map<String, List<String>> cdnMap, String domain) {
+ String topPrivateDomain = getTopPrivateDomain(domain);
List<String> list = cdnMap.get(topPrivateDomain);
if (StringUtil.isEmpty(list)) {
return false;
}
- String[] parma = StrUtil.split(name, ".");
+ String[] parma = StrUtil.split(domain, ".");
out:
for (String cdn : list) {
String[] flag = StrUtil.split(cdn, ".");
diff --git a/src/test/java/com/mesalab/qgw/service/TopEntityTest.java b/src/test/java/com/mesalab/qgw/service/TopEntityTest.java
index 048c37f7..7d489dd4 100644
--- a/src/test/java/com/mesalab/qgw/service/TopEntityTest.java
+++ b/src/test/java/com/mesalab/qgw/service/TopEntityTest.java
@@ -1,7 +1,6 @@
package com.mesalab.qgw.service;
import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
@@ -9,8 +8,6 @@ import cn.hutool.log.LogFactory;
import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;
import com.mesalab.GalaxyQGWApplicationTests;
-import com.mesalab.common.utils.JsonMapper;
-import com.mesalab.network.service.NetworkMonitorService;
import com.mesalab.services.service.EntityService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +27,7 @@ public class TopEntityTest extends GalaxyQGWApplicationTests {
@Autowired
EntityService entityService;
- private List<Map<String, Object>> getLiveChartsData(String fileName) {
+ private List<Map<String, Object>> getEntityData(String fileName) {
File file = new File("benchmark" + File.separator + "entity_dataset" + File.separator + fileName);
List<String> list = FileUtil.readLines(file, CharsetUtil.UTF_8);
List<Map<String, Object>> data = Lists.newArrayList();
@@ -51,7 +48,7 @@ public class TopEntityTest extends GalaxyQGWApplicationTests {
@Test
public void testCUCCSNIOutput() {
Stopwatch stopwatch = Stopwatch.createStarted();
- entityService.mergeSNI(getLiveChartsData("XJ-CUCC-SNI-Top200w.txt"));
+ entityService.mergeSNI(getEntityData("XJ-CUCC-SNI-Top200w.txt"));
stopwatch.stop();
long millis = stopwatch.elapsed(MILLISECONDS);
log.info("time:{} ms", millis);
@@ -60,7 +57,7 @@ public class TopEntityTest extends GalaxyQGWApplicationTests {
@Test
public void testE21SNIOutput() {
Stopwatch stopwatch = Stopwatch.createStarted();
- entityService.mergeSNI(getLiveChartsData("E21-SNI-Top200w.txt"));
+ entityService.mergeSNI(getEntityData("E21-SNI-Top200w.txt"));
stopwatch.stop();
long millis = stopwatch.elapsed(MILLISECONDS);
log.info("time:{} ms", millis);