summaryrefslogtreecommitdiff
path: root/FlumeFieldSplitterInterceptor
diff options
context:
space:
mode:
authorcaohui <[email protected]>2020-10-09 18:14:40 +0800
committercaohui <[email protected]>2020-10-09 18:14:40 +0800
commit899d1d00d5567983c7d12de333eebd180d4fc583 (patch)
treed0abc98e7ef1a2e65be97c33f366651860ac8af8 /FlumeFieldSplitterInterceptor
ZX Flume field_splitter_complement Initial commit 202010091814
Diffstat (limited to 'FlumeFieldSplitterInterceptor')
-rw-r--r--FlumeFieldSplitterInterceptor/FlumeFieldSplitterInterceptor.iml64
-rw-r--r--FlumeFieldSplitterInterceptor/pom.xml151
-rw-r--r--FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/FlumeFieldSplitterApp.java232
-rw-r--r--FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/commonUtils/HashTableConfig.java1551
4 files changed, 1998 insertions, 0 deletions
diff --git a/FlumeFieldSplitterInterceptor/FlumeFieldSplitterInterceptor.iml b/FlumeFieldSplitterInterceptor/FlumeFieldSplitterInterceptor.iml
new file mode 100644
index 0000000..e183e9f
--- /dev/null
+++ b/FlumeFieldSplitterInterceptor/FlumeFieldSplitterInterceptor.iml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+ <output url="file://$MODULE_DIR$/target/classes" />
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+ <excludeFolder url="file://$MODULE_DIR$/target" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.flume:flume-ng-core:1.9.0" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.flume:flume-ng-sdk:1.9.0" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.flume:flume-ng-configuration:1.9.0" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.flume.flume-ng-configfilters:flume-ng-config-filter-api:1.9.0" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.flume:flume-ng-auth:1.9.0" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:11.0.2" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
+ <orderEntry type="library" name="Maven: commons-io:commons-io:2.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.8" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: commons-cli:commons-cli:1.2" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.5" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avro:avro:1.7.4" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.jackson:jackson-core-asl:1.8.8" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.8.8" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: com.thoughtworks.paranamer:paranamer:2.3" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.xerial.snappy:snappy-java:1.0.4.1" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-compress:1.4.1" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.tukaani:xz:1.0" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avro:avro-ipc:1.7.4" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.mortbay.jetty:jetty:6.1.26" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.mortbay.jetty:jetty-util:6.1.26" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.velocity:velocity:1.7" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: io.netty:netty:3.10.6.Final" level="project" />
+ <orderEntry type="library" name="Maven: joda-time:joda-time:2.9.9" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jetty:jetty-servlet:9.4.6.v20170531" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jetty:jetty-security:9.4.6.v20170531" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jetty:jetty-util:9.4.6.v20170531" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jetty:jetty-server:9.4.6.v20170531" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jetty:jetty-http:9.4.6.v20170531" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jetty:jetty-io:9.4.6.v20170531" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jetty:jetty-jmx:9.4.6.v20170531" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.2.2" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.thrift:libthrift:0.9.3" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.4.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.1" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.mina:mina-core:2.0.4" level="project" />
+ <orderEntry type="library" name="Maven: com.zdjizhi:galaxy:1.0.1" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.4" level="project" />
+ <orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" />
+ <orderEntry type="library" name="Maven: com.maxmind.geoip:geoip-api:1.3.1" level="project" />
+ <orderEntry type="library" name="Maven: com.maxmind.geoip2:geoip2:2.12.0" level="project" />
+ <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.5" level="project" />
+ <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.5" level="project" />
+ <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.5" level="project" />
+ <orderEntry type="library" name="Maven: com.maxmind.db:maxmind-db:1.2.2" level="project" />
+ <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.47" level="project" />
+ </component>
+</module> \ No newline at end of file
diff --git a/FlumeFieldSplitterInterceptor/pom.xml b/FlumeFieldSplitterInterceptor/pom.xml
new file mode 100644
index 0000000..84dfcd6
--- /dev/null
+++ b/FlumeFieldSplitterInterceptor/pom.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>field_splitter_complement</artifactId>
+ <groupId>cn.ceiec</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>FlumeFieldSplitterInterceptor</artifactId>
+
+ <repositories>
+ <repository>
+ <id>nexus</id>
+ <name>Team Nexus Repository</name>
+ <url>http://192.168.40.125:8099/content/groups/public</url>
+ </repository>
+
+ <repository>
+ <id>ebi</id>
+ <name>www.ebi.ac.uk</name>
+ <url>http://www.ebi.ac.uk/intact/maven/nexus/content/groups/public/</url>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.1</version>
+ <configuration>
+ <createDependencyReducedPom>true</createDependencyReducedPom>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <transformers>
+ <transformer
+ implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+ <transformer
+ implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+ <mainClass>cn.ac.iie.flume.interceptor.FlumeFieldSplitterApp</mainClass>
+ </transformer>
+ </transformers>
+ <!--&lt;!&ndash;测试添加,下面&ndash;&gt;-->
+ <!--<shadedArtifactAttached>false</shadedArtifactAttached>-->
+ <!--<createSourcesJar>true</createSourcesJar>-->
+ <!--<relocations>-->
+ <!--<relocation>-->
+ <!--<pattern>com.fasterxml.jackson.core</pattern>-->
+ <!--<shadedPattern>com.shaded.fasterxml.jackson.core</shadedPattern>-->
+ <!--</relocation>-->
+ <!--</relocations>-->
+ <!--&lt;!&ndash;测试添加,上面&ndash;&gt;-->
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <executable>java</executable>
+ <includeProjectDependencies>true</includeProjectDependencies>
+ <includePluginDependencies>false</includePluginDependencies>
+ <classpathScope>compile</classpathScope>
+ <mainClass>cn.ac.iie.flume.interceptor.FlumeFieldSplitterApp</mainClass>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ <!--<resources>-->
+ <!--<resource>-->
+ <!--<directory>config</directory>-->
+ <!--<includes>-->
+ <!--<include>realtime_config.properties</include>-->
+ <!--<include>storm_config.properties</include>-->
+ <!--<include>db.properties</include>-->
+ <!--<include>db_pz.properties</include>-->
+ <!--<include>clickhouse.properties</include>-->
+ <!--&lt;!&ndash;<include>**/*.properties</include>&ndash;&gt;-->
+ <!--&lt;!&ndash;<include>**/*.xml</include>&ndash;&gt;-->
+ <!--</includes>-->
+ <!--<filtering>false</filtering>-->
+ <!--</resource>-->
+ <!--<resource>-->
+ <!--<directory>src/main/java</directory>-->
+ <!--<includes>-->
+ <!--<include>log4j.properties</include>-->
+ <!--</includes>-->
+ <!--<filtering>false</filtering>-->
+ <!--</resource>-->
+ <!--</resources>-->
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.flume</groupId>
+ <artifactId>flume-ng-core</artifactId>
+ <version>1.9.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.zdjizhi</groupId>
+ <artifactId>galaxy</artifactId>
+ <version>1.0.1</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>slf4j-log4j12</artifactId>
+ <groupId>org.slf4j</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>log4j-over-slf4j</artifactId>
+ <groupId>org.slf4j</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>fastjson</artifactId>
+ <version>1.2.47</version>
+ </dependency>
+ </dependencies>
+
+
+</project> \ No newline at end of file
diff --git a/FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/FlumeFieldSplitterApp.java b/FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/FlumeFieldSplitterApp.java
new file mode 100644
index 0000000..720cbe5
--- /dev/null
+++ b/FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/FlumeFieldSplitterApp.java
@@ -0,0 +1,232 @@
+package cn.ac.iie.flume.interceptor;
+
+import cn.ac.iie.flume.interceptor.commonUtils.HashTableConfig;
+import com.alibaba.fastjson.JSONObject;
+import com.zdjizhi.utils.IpLookup;
+import com.zdjizhi.utils.StringUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.flume.Context;
+import org.apache.flume.Event;
+import org.apache.flume.interceptor.Interceptor;
+import org.apache.log4j.Logger;
+
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+public class FlumeFieldSplitterApp implements Interceptor {
+ private static Logger logger = Logger.getLogger(FlumeFieldSplitterApp.class);
+
+ private static HashMap<String, String> hmFromPz;
+
+ private String handleField;//从原数据中获取---需要进行切分的字段,即最外层的表字段,即"app_label":"PROTO_ID=10062;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0;"中的 app_label
+
+ private String splitFields;//用户定义---需要切分的字段的内容字段,key-value形式,key为要补充的名称协议,value为原数据字段名,暂定格式为 proto:PROTO_ID;app:APP_ID;web:WEB_ID;os:OS_ID;bs:BS_ID
+
+ private String fieldsSeparator;//多个字段之间的分隔符,例如"app_label":"PROTO_ID=10062;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0;"中的 ;
+
+ private String fieldDelimiter;//单个字段内部的分隔符,例如"app_label":"PROTO_ID=10062;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0;"中的 =
+
+ private String defaultFieldValue;//该字段不存在时的默认值value,注意不是json的key,是json的value
+
+ public void initialize() {
+ if (!("noSetSplitFields".equals(splitFields))) {
+ hmFromPz = new HashMap<>();
+ if (splitFields.contains(";")) {
+ String[] splitFieldsToKeyValue = splitFields.split(";");
+ for (String splitFieldToKeyValue : splitFieldsToKeyValue) {
+ if (splitFieldToKeyValue.contains(":")) {
+ String[] splitSingleFieldToKeyValue = splitFieldToKeyValue.split(":");
+ hmFromPz.put(splitSingleFieldToKeyValue[0], splitSingleFieldToKeyValue[1]);
+ } else {
+ logger.error("key-value must split by ===> : <=== !!!");
+ }
+ }
+ } else {
+ if (splitFields.contains(":")) {
+ String[] splitSingleFieldToKeyValue = splitFields.split(":");
+ hmFromPz.put(splitSingleFieldToKeyValue[0], splitSingleFieldToKeyValue[1]);
+ } else {
+ logger.error("field must be split by ===> ; <=== ,and key-value must split by ===> : <=== !!!");
+ }
+ }
+ }
+
+ }
+
+ public FlumeFieldSplitterApp(String handleField, String splitFields, String fieldsSeparator, String fieldDelimiter, String defaultFieldValue) {
+ this.handleField = handleField;
+ this.splitFields = splitFields;
+ this.fieldsSeparator = fieldsSeparator;
+ this.fieldDelimiter = fieldDelimiter;
+ this.defaultFieldValue = defaultFieldValue;
+ }
+
+ public Event intercept(Event event) {
+ String message = null;
+ try {
+ message = new String(event.getBody(), "utf-8");
+ } catch (UnsupportedEncodingException e) {
+ message = new String(event.getBody());
+ }
+ try {
+ if (StringUtils.isNotBlank(message)) {
+ logger.info("Field_Splitter_Interceptor this cycle message begin ---><<" + message + ">><---");
+ Map<String, Object> map = JSONObject.parseObject(message, Map.class);
+ if (!("noSetHandleField".equals(handleField)) && !("noSetSplitFields".equals(splitFields))
+ && !("noSetFieldsSeparator".equals(fieldsSeparator)) && !("noSetFieldDelimiter".equals(fieldDelimiter))) {
+ /**
+ * 切分存储原数据中需要映射的原始字段
+ */
+ HashMap<String, String> hmInnerFields = new HashMap<>();
+ String handleFieldValue = (String) map.get(handleField);
+
+ if (StringUtil.isBlank(handleFieldValue)) {
+ handleFieldValue = defaultFieldValue;
+ }
+
+ String[] splitHandleFieldValues = handleFieldValue.split(fieldsSeparator);
+ for (int i = 0; i < splitHandleFieldValues.length; i++) {
+ if (StringUtils.isNotBlank(splitHandleFieldValues[i])) {
+ String splitHandleFieldValue = splitHandleFieldValues[i];
+ String[] innerFields = splitHandleFieldValue.split(fieldDelimiter);
+ hmInnerFields.put(innerFields[0], innerFields[1]);
+ }
+ }
+
+ /**
+ * 针对hmInnerFields和hmFromPz开始做映射处理
+ * hmInnerFields格式为hmInnerFields(PROTO_ID,10062)
+ * hmFromPz格式为hmFromPz(proto,PROTO_ID)
+ */
+ //进行协议名称映射
+ if (hmFromPz.containsKey("proto")) {
+ String protoID = hmInnerFields.get(hmFromPz.get("proto"));
+ if (StringUtils.isNotBlank(protoID)) {
+ String protoName = HashTableConfig.PROTOCOL_TYPE.get(protoID);
+ if (StringUtils.isNotBlank(protoName)) {
+ map.put(hmFromPz.get("proto").toLowerCase() + "_name", protoName);
+ }
+ }
+ }
+
+ //进行应用名称映射
+ if (hmFromPz.containsKey("app")) {
+ String appID = hmInnerFields.get(hmFromPz.get("app"));
+ if (StringUtils.isNotBlank(appID)) {
+ String appName = HashTableConfig.APP_TYPE.get(appID);
+ if (StringUtils.isNotBlank(appName)) {
+ map.put(hmFromPz.get("app").toLowerCase() + "_name", appName);
+ }
+ }
+ }
+
+ //进行domain映射
+ if (hmFromPz.containsKey("web")) {
+ String webID = hmInnerFields.get(hmFromPz.get("web"));
+ if (StringUtils.isNotBlank(webID)) {
+ String webName = HashTableConfig.DOMAIN_TYPE.get(webID);
+ if (StringUtils.isNotBlank(webName)) {
+ map.put(hmFromPz.get("web").toLowerCase() + "_name", webName);
+ }
+ }
+ }
+
+ //进行OS映射-操作系统映射-20200630新增-os:OS_ID
+ if (hmFromPz.containsKey("os")) {
+ String osID = hmInnerFields.get(hmFromPz.get("os"));
+ if (StringUtils.isNotBlank(osID)) {
+ String osName = HashTableConfig.OS_TYPE.get(osID);
+ if (StringUtils.isNotBlank(osName)) {
+ map.put(hmFromPz.get("os").toLowerCase() + "_name", osName);
+ }
+ }
+ }
+
+ //进行BS映射-浏览器映射-20200630新增-bs:BS_ID
+ if (hmFromPz.containsKey("bs")) {
+ String bsID = hmInnerFields.get(hmFromPz.get("bs"));
+ if (StringUtils.isNotBlank(bsID)) {
+ String bsName = HashTableConfig.BS_TYPE.get(bsID);
+ if (StringUtils.isNotBlank(bsName)) {
+ map.put(hmFromPz.get("bs").toLowerCase() + "_name", bsName);
+ }
+ }
+ }
+ } else {
+ if ("noSetHandleField".equals(handleField)) {
+ logger.error("Field_Splitter_Interceptor If you want to split,please set handleField!");
+ }
+ if ("noSetSplitFields".equals(splitFields)) {
+ logger.error("Field_Splitter_Interceptor If you want to split,please set splitFields!");
+ }
+ if ("noSetFieldsSeparator".equals(fieldsSeparator)) {
+ logger.error("Field_Splitter_Interceptor If you want to split,please set fieldsSeparator!");
+ }
+ if ("noSetFieldDelimiter".equals(fieldDelimiter)) {
+ logger.error("Field_Splitter_Interceptor If you want to split,please set fieldDelimiter!");
+ }
+ }
+ message = JSONObject.toJSONString(map);
+ logger.info("Field_Splitter_Interceptor this cycle message over ---><<" + message + ">><---");
+ event.setBody(message.getBytes());
+ return event;
+ }
+ } catch (Exception e) {
+ logger.error("FlumeFieldSplitterApp intercept(Event event) method is error !!!--->{" + e + "}<---,this message is ===>" + message + "<===");
+ e.printStackTrace();
+ }
+ return event;
+ }
+
+ public List<Event> intercept(List<Event> list) {
+ List resultList = new ArrayList();
+ for (Event event : list) {
+ Event r = intercept(event);
+ if (r != null) {
+ resultList.add(r);
+ }
+ }
+ return resultList;
+ }
+
+ public void close() {
+ }
+
+ public static class FlumeFieldSplitterAppBuilder implements Interceptor.Builder {
+
+ private String handleField;
+ private String splitFields;
+ private String fieldsSeparator;
+ private String fieldDelimiter;
+ private String defaultFieldValue;
+
+ public Interceptor build() {
+ return new FlumeFieldSplitterApp(this.handleField, this.splitFields,
+ this.fieldsSeparator, this.fieldDelimiter, this.defaultFieldValue);
+ }
+
+ public void configure(Context context) {
+ //需要处理的字段,类比于app_label
+ this.handleField = context.getString("handleField", "noSetHandleField");
+
+ //切分字段,暂定格式为proto:PROTO_ID;app:APP_ID;web:WEB_ID;os:OS_ID;bs:BS_ID,每组之间以;分割,组内key-value以:分割
+ this.splitFields = context.getString("splitFields", "noSetSplitFields");
+
+ //多个字段之间的分隔符,例如"app_label":"PROTO_ID=10062;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0;"中的 ;
+ this.fieldsSeparator = context.getString("fieldsSeparator", "noSetFieldsSeparator");
+
+ //单个字段内部的分隔符,例如"app_label":"PROTO_ID=10062;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0;"中的 =
+ this.fieldDelimiter = context.getString("fieldDelimiter", "noSetFieldDelimiter");
+
+ //切分的字段的默认值,比如"app_label":"PROTO_ID=10062;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0;"中的 PROTO_ID=10062;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0; 部分的默认值
+ this.defaultFieldValue = context.getString("defaultFieldValue", "PROTO_ID=0;APP_ID=0;OS_ID=0;BS_ID=0;WEB_ID=0;BEHAV_ID=0;");
+
+ logger.info("FlumeFieldSplitterApp defaultFieldValue is set as : {" + handleField + ":" + defaultFieldValue + "}");
+ }
+ }
+}
+
diff --git a/FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/commonUtils/HashTableConfig.java b/FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/commonUtils/HashTableConfig.java
new file mode 100644
index 0000000..c10afa4
--- /dev/null
+++ b/FlumeFieldSplitterInterceptor/src/main/java/cn/ac/iie/flume/interceptor/commonUtils/HashTableConfig.java
@@ -0,0 +1,1551 @@
+package cn.ac.iie.flume.interceptor.commonUtils;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+public class HashTableConfig implements Serializable {
+
+ private static final long serialVersionUID = -6874486912618291991L;
+
+ /**
+ * 操作系统类型-2020-06-30新增
+ */
+ public static final Map<String, String> OS_TYPE = new HashMap<String, String>() {
+ private static final long serialVersionUID = 8445342694006806126L;
+
+ {
+ put("0", "0-超出操作系统范畴");
+ put("30000", "Windows");
+ put("30001", "Linux");
+ put("30002", "Mac OS X");
+ put("30003", "OpenBSD");
+ put("30004", "FreeBSD");
+ put("30005", "Solaris");
+ put("30006", "OpenVMS");
+ put("30007", "NeXTSTEP");
+ put("30008", "HP-UX");
+ put("30009", "Tru64");
+ put("30010", "iOS");
+ put("30011", "Blackberry");
+ put("30012", "Windows Phone");
+ put("30013", "Android");
+ put("30014", "Symbian");
+ put("0x0FFFFFFF", "Unspecified");
+ }
+
+ };
+
+ /**
+ * 浏览器类型-2020-06-30新增
+ */
+ public static final Map<String, String> BS_TYPE = new HashMap<String, String>() {
+ private static final long serialVersionUID = 5231960246987011322L;
+
+ {
+ put("0", "0-超出浏览器范畴");
+ put("40000", "Safari");
+ put("40001", "Mozilla Firefox");
+ put("40002", "Google Chrome");
+ put("40003", "Edge");
+ put("40004", "Opera");
+ put("40005", "Yandex");
+ put("40006", "Android brower");
+ put("40007", "Konqueror");
+ put("40008", "Bing");
+ put("40009", "SogouMobileBrowser");
+ put("40010", "SogouBrowser");
+ put("40011", "OPPO");
+ put("40012", "UCBrowser");
+ put("40013", "2345Browser");
+ put("40014", "QQBrowser");
+ put("40015", "QQMobileBrowser");
+ put("40016", "baidubrowser");
+ put("40017", "LieBao");
+ put("40018", "MiuiBrowser");
+ put("40019", "SamsungBrowser");
+ put("40020", "IE");
+ put("40021", "GriOS");
+ put("40022", "360SE");
+ put("40023", "Maxthon");
+ put("40024", "The World");
+ put("40025", "JuziBrowser");
+ put("40026", "TencentTraveler");
+ put("0x0FFFFFFF", "Unspecified");
+ }
+
+ };
+
+ /**
+ * Domain类型-2019-12-19更新
+ */
+ public static final Map<String, String> DOMAIN_TYPE = new HashMap<String, String>() {
+ private static final long serialVersionUID = -5715507052760277865L;
+
+ {
+ put("0", "超出网站范畴");
+ put("1", "Google");
+ put("1001", "Youtube");
+ put("2001", "Facebook");
+ put("3001", "Baidu");
+ put("4001", "Wikipedia");
+ put("5001", "Reddit");
+ put("6001", "Yahoo");
+ put("7001", "Qq");
+ put("8001", "Taobao");
+ put("9001", "Amazon");
+ put("10001", "Tmall");
+ put("11001", "Twitter");
+ put("12001", "Sohu");
+ put("13001", "Instagram");
+ put("14001", "Vk");
+ put("15001", "Live");
+ put("16001", "Jd");
+ put("17001", "Sina");
+ put("18001", "Weibo");
+ put("19001", "Yandex");
+ put("20001", "360");
+ put("22001", "Netflix");
+ put("23001", "Pornhub");
+ put("24001", "Twitch");
+ put("25001", "Linkedin");
+ put("26001", "Csdn");
+ put("28001", "Microsoft");
+ put("29001", "Office");
+ put("30001", "Bing");
+ put("31001", "Ebay");
+ put("32001", "Alipay");
+ put("33001", "Xvideos");
+ put("34001", "Mail");
+ put("35001", "Ok");
+ put("36001", "Msn");
+ put("39001", "Imgur");
+ put("40001", "Aliexpress");
+ put("41001", "Tumblr");
+ put("42001", "Wordpress");
+ put("43001", "Wikia");
+ put("44001", "Imdb");
+ put("45001", "Whatsapp");
+ put("46001", "Stackoverflow");
+ put("47001", "Github");
+ put("48001", "Livejasmin");
+ put("49001", "Xhamster");
+ put("50001", "Hao123");
+ put("51001", "Blogspot");
+ put("52001", "Deloton");
+ put("53001", "Paypal");
+ put("54001", "Tribunnews");
+ put("55001", "Popads");
+ put("56001", "Apple");
+ put("57001", "Diply");
+ put("58001", "Bongacams");
+ put("60001", "Pinterest");
+ put("61001", "Xnxx");
+ put("62001", "Adobe");
+ put("63001", "Providr");
+ put("65001", "Coccoc");
+ put("66001", "Txxx");
+ put("67001", "Dropbox");
+ put("69001", "Savefrom");
+ put("70001", "Pixnet");
+ put("71001", "Bbc");
+ put("72001", "Thestartmagazine");
+ put("73001", "Quora");
+ put("74001", "Tianya");
+ put("75001", "Soso");
+ put("76001", "Chaturbate");
+ put("77001", "Amazonaws");
+ put("78001", "Booking");
+ put("79001", "Espn");
+ put("80001", "haosou");
+ put("81001", "Cnn");
+ put("82001", "Craigslist");
+ put("83001", "Nicovideo");
+ put("84001", "Xinhuanet");
+ put("85001", "Soundcloud");
+ put("86001", "Tokopedia");
+ put("87001", "Dailymotion");
+ put("88001", "Youth");
+ put("89001", "Nytimes");
+ put("90001", "Detik");
+ put("91001", "Ask");
+ put("92001", "Naver");
+ put("93001", "Stackexchange");
+ put("94001", "Dkn");
+ put("95001", "Thepiratebay");
+ put("96001", "Roblox");
+ put("97001", "Rakuten");
+ put("98001", "Onlinesbi");
+ put("99001", "Openload");
+ put("100001", "Spotify");
+ put("101001", "Nih");
+ put("102001", "Vimeo");
+ put("103001", "Fc2");
+ put("104001", "Aparat");
+ put("105001", "Ettoday");
+ put("106001", "Mozilla");
+ put("107001", "1688");
+ put("108001", "K618");
+ put("109001", "Exdynsrv");
+ put("110001", "Oath");
+ put("111001", "Ntd");
+ put("112001", "Theguardian");
+ put("113001", "Mediafire");
+ put("114001", "Chase");
+ put("115001", "Flipkart");
+ put("116001", "Exosrv");
+ put("117001", "Avito");
+ put("118001", "Slideshare");
+ put("119001", "Dailymail");
+ put("120001", "Discordapp");
+ put("121001", "Zhihu");
+ put("122001", "Salesforce");
+ put("123001", "Theepochtimes");
+ put("124001", "Softonic");
+ put("125001", "Globo");
+ put("126001", "Bukalapak");
+ put("127001", "Douyu");
+ put("128001", "Nextoptim");
+ put("129001", "Deviantart");
+ put("130001", "Indeed");
+ put("131001", "Lolsided");
+ put("132001", "Bles");
+ put("133001", "Cnet");
+ put("134001", "Alibaba");
+ put("135001", "Bet9ja");
+ put("136001", "Vice");
+ put("137001", "Lifedaily");
+ put("138001", "Hotmovs");
+ put("139001", "Sogou");
+ put("140001", "Uol");
+ put("141001", "Doubleclick");
+ put("142001", "Mercadolivre");
+ put("143001", "Speakol");
+ put("144001", "Babytree");
+ put("145001", "Liputan6");
+ put("146001", "Wikihow");
+ put("147001", "China");
+ put("148001", "Etsy");
+ put("149001", "W3schools");
+ put("150001", "Youm7");
+ put("151001", "Scribd");
+ put("152001", "Rumble");
+ put("153001", "Walmart");
+ put("154001", "Twimg");
+ put("155001", "Yelp");
+ put("156001", "Kompas");
+ put("157001", "Messenger");
+ put("159001", "Onlinevideoconverter");
+ put("160001", "Redtube");
+ put("161001", "Gmw");
+ put("162001", "Caijing");
+ put("163001", "Mama");
+ put("164001", "Chinadaily");
+ put("165001", "Cricbuzz");
+ put("166001", "Ladbible");
+ put("167001", "Doublepimpssl");
+ put("168001", "Steampowered");
+ put("169001", "Mega");
+ put("170001", "Yts");
+ put("171001", "Youporn");
+ put("172001", "Buzzfeed");
+ put("173001", "Indiatimes");
+ put("174001", "Hotstar");
+ put("175001", "Cnblogs");
+ put("176001", "Bet365");
+ put("177001", "Wetransfer");
+ put("178001", "Eastday");
+ put("179001", "Rambler");
+ put("180001", "Coinmarketcap");
+ put("181001", "Huanqiu");
+ put("182001", "Hulu");
+ put("183001", "Abs-cbn");
+ put("184001", "Steamcommunity");
+ put("185001", "4chan");
+ put("186001", "Metropcs");
+ put("187001", "Zillow");
+ put("188001", "Godaddy");
+ put("189001", "Blastingnews");
+ put("190001", "Washingtonpost");
+ put("191001", "Upornia");
+ put("192001", "Nownews");
+ put("193001", "Hibids10");
+ put("194001", "Aliyun");
+ put("195001", "Fapmeth");
+ put("196001", "Genius");
+ put("197001", "Tripadvisor");
+ put("198001", "Bilibili");
+ put("199001", "Livejournal");
+ put("200001", "Irctc");
+ put("201001", "Slack");
+ put("202001", "Bankofamerica");
+ put("203001", "Forbes");
+ put("204001", "Archive");
+ put("205001", "Ebay-kleinanzeigen");
+ put("206001", "Doublepimp");
+ put("207001", "Foxnews");
+ put("208001", "Wellsfargo");
+ put("209001", "Speedtest");
+ put("210001", "Researchgate");
+ put("211001", "Medium");
+ put("212001", "Gfycat");
+ put("213001", "Exoclick");
+ put("214001", "1337x");
+ put("215001", "Ltn");
+ put("216001", "Hclips");
+ put("217001", "Redd");
+ put("218001", "Trello");
+ put("219001", "Duckduckgo");
+ put("220001", "Xfinity");
+ put("221001", "Cloudfront");
+ put("222001", "Blackboard");
+ put("223001", "Elfagr");
+ put("224001", "Weather");
+ put("225001", "Youdao");
+ put("226001", "Sberbank");
+ put("227001", "Rednet");
+ put("228001", "Iqiyi");
+ put("229001", "Setn");
+ put("230001", "People");
+ put("231001", "Leboncoin");
+ put("232001", "Gmx");
+ put("233001", "Shutterstock");
+ put("234001", "Blogger");
+ put("235001", "Ikea");
+ put("236001", "Kakaku");
+ put("237001", "Hdzog");
+ }
+
+ };
+
+ /**
+ * APP类型-2019-12-19更新---20200914二次更新码表
+ */
+ public static final Map<String, String> APP_TYPE = new HashMap<String, String>() {
+ private static final long serialVersionUID = 5715507052760277865L;
+
+ {
+ put("0", "超出APP范畴");
+ put("10000", "ALL_TRAF");
+ put("10003", "DNS");
+ put("10004", "FTP");
+ put("10005", "FTPS");
+ put("10007", "HTTP");
+ put("10008", "HTTPS");
+ put("10009", "ICMP");
+ put("10010", "IKE");
+ put("10011", "IMAP");
+ put("10012", "IMAPS");
+ put("10013", "IPSEC");
+ put("10014", "XMPP");
+ put("10015", "L2TP");
+ put("10016", "NTP");
+ put("10017", "POP3");
+ put("10018", "POP3SSL");
+ put("10019", "PPTP");
+ put("10020", "QUIC");
+ put("10021", "SIP");
+ put("10022", "SMB");
+ put("10023", "SMTP");
+ put("10024", "SMTPS");
+ put("10025", "SPDY");
+ put("10028", "SSH");
+ put("10029", "SSL");
+ put("10030", "SOCKS");
+ put("10032", "RTSP");
+ put("10033", "TELNET");
+ put("10039", "RTCP");
+ put("10040", "RTP");
+ put("10043", "RDP");
+ put("10047", "TFTP");
+ put("10049", "DHCP");
+ put("10054", "MDNS");
+ put("10055", "NNTP");
+ put("10056", "SNMP");
+ put("10057", "SSDP");
+ put("10058", "SYSLOG");
+ put("10060", "RADIUS");
+ put("10061", "OPENVPN");
+ put("10062", "STUN");
+ put("10063", "TEREDO");
+ put("10065", "RTMP");
+ put("10069", "NETBIOS");
+ put("10076", "IRC");
+ put("10084", "ICMPv6");
+ put("10094", "BACNET");
+ put("10100", "KADEMLIA");
+ put("10102", "LDAPAD");
+ put("10109", "NetFlow");
+ put("10114", "RFB");
+ put("10115", "RTMFP");
+ put("10120", "TPKT");
+ put("10123", "CitrixCGP");
+ put("19001", "UnknownTCP");
+ put("19002", "UnknownUDP");
+ put("19003", "UnknownOther");
+ put("19004", "Incomplete-tcp");
+ put("19005", "Insufficient-data");
+ put("19999", "APPDefined");
+ put("10006", "GRE");
+ put("10031", "Bittorrent");
+ put("10048", "BGP");
+ put("10053", "LDAP");
+ put("10079", "IGMP");
+ put("10082", "OSPF");
+ put("10095", "Bitcoin");
+ put("10098", "DAHUA");
+ put("20004", "Alipay");
+ put("20008", "BaiduHD");
+ put("20025", "MeiTuan");
+ put("20029", "MobileQQ");
+ put("20034", "QQ");
+ put("20035", "QQFile");
+ put("20040", "SogouSeries");
+ put("20046", "QQWeb");
+ put("20056", "YouDaoNote");
+ put("21002", "ApplePush");
+ put("21003", "Badoo");
+ put("21011", "Drugvokrug");
+ put("21017", "GooglePush");
+ put("21032", "Mail.ruAgent");
+ put("21036", "MicrosoftUpdate");
+ put("21041", "Odnoklassniki");
+ put("21054", "SignalPrivateMessenger");
+ put("21057", "Skype");
+ put("21059", "Snapchat");
+ put("21067", "Telegram");
+ put("21072", "Twitter");
+ put("21074", "Viber");
+ put("21076", "Vkontakte");
+ put("21078", "WeChat");
+ put("21079", "WhatsApp");
+ put("23002", "CMBMobileBank");
+ put("23005", "ICBCMobileBank");
+ put("26508", "Facebook");
+ put("26514", "iQIYI");
+ put("26524", "Periscope");
+ put("26529", "QQMusic");
+ put("26541", "YouTube");
+ put("27008", "Astrill");
+ put("27023", "Betternet");
+ put("27031", "BrowsecVPN");
+ put("27034", "CanadaVPN");
+ put("27057", "EasyVPN");
+ put("27059", "ExpressVPN");
+ put("27063", "FishVPN");
+ put("27065", "FoxVPN");
+ put("27066", "VPNFrance");
+ put("27070", "Freegate");
+ put("27081", "FreeVPNProxy");
+ put("27085", "FreeVPNUnlimitedProxy");
+ put("27086", "VPNGermany");
+ put("27091", "GooseVPN");
+ put("27094", "Heywire");
+ put("27095", "HidemeVPN");
+ put("27096", "HideMyAss");
+ put("27099", "HolaVPN");
+ put("27102", "HotSpotShield");
+ put("27104", "HotSpotshieldVPN");
+ put("27105", "HotSpotVPN");
+ put("27141", "LunaVPN");
+ put("27142", "LuxVPN");
+ put("27144", "VPNMalaysia");
+ put("27169", "Orbot");
+ put("27172", "PandaVPN");
+ put("27178", "Psiphon");
+ put("27180", "PureVPN");
+ put("27189", "SecureVPN");
+ put("27192", "SetupVPNChromeExtension");
+ put("27193", "Shadowsocks");
+ put("27197", "SkyVPN");
+ put("27208", "SuperVPN");
+ put("27215", "SurfSharkVPN");
+ put("27224", "ThunderVPN");
+ put("27227", "TOROrbot");
+ put("27230", "TunnelBear");
+ put("27233", "TurboVPN");
+ put("27245", "USAVPN");
+ put("27247", "UVPN");
+ put("27254", "VPNAustralia");
+ put("27255", "VPNCanada");
+ put("27262", "VPNIndonesia");
+ put("27266", "VPNIndia");
+ put("27271", "VPNJapan");
+ put("27273", "VPNKorea");
+ put("27275", "VPNProxyMaster");
+ put("27278", "AvastVPN");
+ put("27283", "VPNRussia");
+ put("27286", "VPNTap2free");
+ put("27288", "VPNUkraine");
+ put("27290", "VPNUSA");
+ put("27291", "VyprVPN");
+ put("27297", "WolfVPN");
+ put("27299", "Ultrasurf");
+ put("27305", "ZenmateVPN");
+ put("27309", "SecurityKiss");
+ put("27310", "VPNOneClick");
+ put("27311", "NordVPN");
+ put("27312", "HoxxVPN");
+ put("27313", "WindscribeVPN");
+ put("27314", "TouchVPN");
+ put("27315", "Speedify");
+ put("27316", "UPXbrowser");
+ put("27317", "VPN365");
+ put("27318", "ProtonVPN");
+ put("27319", "OVPNspider");
+ put("27320", "BusinessVPN");
+ put("27321", "VPNtt");
+ put("27322", "FoxFlyRouter");
+ put("27323", "LaowangVPN");
+ put("27324", "SurfVPN");
+ put("27325", "BaiJingVPN");
+ put("27327", "FlexVPN");
+ put("27328", "LionVPN");
+ put("27329", "VPNIsrael");
+ put("27330", "PandaVPNPro");
+ put("27331", "LieBaoJiaSuQi");
+ put("27332", "AceVPN");
+ put("27333", "ShotVPN");
+ put("27334", "McAfeeVPN");
+ put("27335", "SmartVPN");
+ put("27336", "RusVPN");
+ put("27337", "VPNify");
+ put("27338", "UnlockSecureFreeVPN");
+ put("27339", "BestVPNProxy");
+ put("27340", "MelonVPN");
+ put("27341", "USAVPNMaster");
+ put("27342", "FreeUnlimitedVPNProxy");
+ put("27343", "FreeVPNUnblockProxy");
+ put("27344", "VPNProxyMasterPro");
+ put("27345", "VPNProxyMasterLite");
+ put("27346", "CyberGuardVPN");
+ put("27347", "TopVPN");
+ put("27348", "FreeZenVPN");
+ put("27349", "VPNEasy");
+ put("27350", "SetupVPN");
+ put("27351", "VPNHub");
+ put("27352", "FreeVPNWhiteKey");
+ put("27353", "FreeVPNColorKey");
+ put("27354", "EutVPN");
+ put("27355", "UFOVPNBasic");
+ put("27356", "UFOVPN");
+ put("27357", "FinchVPN");
+ put("27358", "FlashVPN");
+ put("27359", "LunaVPNFreeProxy");
+ put("27400", "StarVPN");
+ put("27403", "PlexVPN");
+ put("27406", "DailyVPN");
+ put("27408", "CyberGhostVPN");
+ put("27411", "VPNLite");
+ put("27412", "SnapVPN");
+ put("27413", "VPNRobot");
+ put("27417", "BESTVPN");
+ put("27418", "JapanVPNMasterFree");
+ put("27419", "VPNPrivateProxy");
+ put("27420", "AntiBlokirVPN");
+ put("27421", "FreeVPNProxyMaster");
+ put("27422", "IPVanishVPN");
+ put("27426", "UnlimitedVPN");
+ put("27427", "OneVPN");
+ put("27428", "AppsverseAvVPN");
+ put("27430", "CloudVPN");
+ put("27432", "VPNInf");
+ put("27433", "MelonVPNNew");
+ put("27434", "GeckoVPN");
+ put("27436", "Seed4MeVPN");
+ put("27437", "MatrixVPN");
+ put("27438", "ElectroVPN");
+ put("27440", "BVPN");
+ put("27441", "WASELProVPN");
+ put("27442", "IWASEL");
+ put("27443", "CatVPN");
+ put("27446", "PhoneGuardianVPN");
+ put("27448", "VpnBeaver");
+ put("27449", "SpeedVPN");
+ put("27450", "TroidVPN");
+ put("27455", "SmallRabbitVPN");
+ put("27456", "ArmadaVPN");
+ put("27457", "TomVPN");
+ put("27459", "GOVPN");
+ put("27462", "IvacyVPN");
+ put("27464", "VPNGO");
+ put("27467", "Try2CatchVPN");
+ put("27468", "BoxPN");
+ put("27469", "VPNTunnel");
+ put("27471", "VPNAI");
+ put("27478", "FreeVPN");
+ put("27479", "YinHeVPN");
+ put("27480", "FreeSSVPN");
+ put("27481", "FreeMikaVPN");
+ put("27485", "AntVPN");
+ put("27486", "WaspVPN");
+ put("27491", "VPNhub");
+ put("27498", "RejinderiFreeVPN");
+ put("27501", "GoatVPN");
+ put("27502", "SoloVPN");
+ put("27507", "HouWangVPN");
+ put("27511", "Nash");
+ put("27516", "HOTVPN");
+ put("27520", "WORLDVPN");
+ put("27521", "HexatechVPN");
+ put("27522", "R-VPN");
+ put("27523", "SatuVPN");
+ put("27532", "PolestarVPN");
+ put("27533", "VPNMonster");
+ put("27538", "BuddyVPN");
+ put("27540", "VPNEARTH");
+ put("27546", "VPNEasy");
+ put("27549", "FastFreeVPN");
+ put("27555", "liquiduRocketVPN");
+ put("27558", "TunnelLight");
+ put("27559", "NetVPN");
+ put("27560", "SmartLockVPN");
+ put("27561", "BoxVPN");
+ put("27562", "TheBestVPNHotspotMaster");
+ put("27564", "VPNChina");
+ put("27566", "VPNBlue");
+ put("27568", "BlueVPN");
+ put("27569", "VPNPlus");
+ put("27570", "VPNBlue");
+ put("27571", "VPNCity");
+ put("27575", "Fresh VPN");
+ put("27576", "PhoenixVPN");
+ put("27577", "LightVPN");
+ put("27578", "BESTVPN");
+ put("27580", "LvYeVPN");
+ put("27582", "VPNBOTTLE");
+ put("27583", "VPNExpress");
+ put("27584", "PrivatixVPN");
+ put("27585", "WhatsVPN");
+ put("27587", "OrangeVPN");
+ put("27591", "SuperVPN");
+ put("27599", "Lite VPN Hotspot");
+ put("27601", "JustVPN");
+ put("27602", "HoxxVPN");
+ put("27604", "OmanVPN");
+ put("27611", "TaiwanVPN");
+ put("27612", "WangVPN");
+ put("27613", "EgyptVPN");
+ put("27614", "BrazilVPN");
+ put("27615", "SpainVPN");
+ put("27616", "NewZealandVPN");
+ put("27617", "PhilippinesVPN");
+ put("27618", "IndonesiaVPN");
+ put("27619", "VPNBestVPN");
+ put("27621", "FROGVPN");
+ put("27622", "BlackVPN");
+ put("27623", "ChinaFastVpn");
+ put("27624", "RussiaFastVPN");
+ put("27625", "LaoSongVPN");
+ put("27626", "IranVPN");
+ put("27628", "ZVPN");
+ put("27629", "OMGVPN");
+ put("27630", "AmigoVPN");
+ put("27631", "FreeVPN");
+ put("27632", "PhilippinesVPN");
+ put("27633", "EgyptVPN");
+ put("27637", "GoldenNetworkVPN");
+ put("27638", "PurpleVPN");
+ put("27646", "MambaVPN");
+ put("27647", "AirVPN");
+ put("27648", "LunaVPN");
+ put("27649", "UFOVPN-NetVPN");
+ put("27650", "ArvinVPN");
+ put("27651", "OwlVPNFree");
+ put("27654", "HalleyVPN");
+ put("27655", "HotFreeVPN");
+ put("27662", "VPNPro");
+ put("28602", "FaceTime");
+ put("28617", "Zello");
+ put("28808", "AppStore");
+ put("28832", "Google");
+ put("28840", "Instagram");
+ put("28842", "JingDong");
+ put("28858", "MicrosoftTeam");
+ put("28865", "Operamini");
+ put("28869", "GooglePlayMarket");
+ put("28877", "QQWebVideo");
+ put("28878", "QQVideoChat");
+ put("28889", "Weibo");
+ put("28899", "BaiDuTieBa");
+ put("28916", "Yandex");
+ put("28991", "YandexTurbo");
+ put("29200", "HuaTianOA");
+ put("29201", "PHPOA");
+ put("29202", "78OA");
+ put("29203", "TongDaOA");
+ put("29204", "WeaverOA");
+ put("29205", "RanZhiOA");
+ put("29206", "JinDieOA");
+ put("29207", "RuvarOA");
+ put("29249", "IIEARP");
+ put("29252", "OpenVPN");
+ put("29254", "WindowsRemote");
+ put("29300", "HuaWeiCloudWeLink");
+ put("29301", "FeiShu");
+ put("29302", "DingDing");
+ put("29303", "CSTCloud");
+ put("29304", "ShiMoDocs");
+ put("29305", "WeiXinWork");
+ put("29308", "TencentDocs");
+ put("29309", "YinXiangNotes");
+ put("29310", "YouDaoNotes");
+ put("29311", "TencentMeeting");
+ put("29312", "Trello");
+ put("29313", "Quip");
+ put("29409", "XYLink");
+ put("29410", "Teambition");
+ put("31001", "SuspectSS");
+ put("31002", "vpngate");
+ put("24001", "mptcp");
+ put("24002", "http2");
+ put("24003", "Tls1.3");
+ put("24004", "ICMPTunnel");
+ put("24005", "TlsESNI");
+ put("31003", "TerroristWebsite");
+ put("31004", "ShadowsocksCloud");
+ put("31005", "SSRCloud");
+ put("31006", "V2rayCloud");
+ put("20010", "Jingdong");
+ put("20011", "Taobao");
+ put("20013", "Zhihu");
+ put("20014", "Handle");
+ put("28912", "WPS");
+ put("28962", "Office365");
+ put("29109", "Teamviewer");
+ put("29110", "Xiangrikui");
+ put("29208", "Tita");
+ put("40001", "realvnc");
+ put("40002", "shoutcast");
+ put("40003", "dianshijia");
+ put("40004", "akamai");
+ put("40005", "akamai");
+ put("40006", "acercloud");
+ put("40007", "zeroess_udp");
+ put("40008", "trojan_zeroess");
+ put("40009", "yahoo");
+ put("40010", "winmessage");
+ put("40011", "trion");
+ put("40012", "thq");
+ put("40013", "svn");
+ put("40014", "saprouter");
+ put("40015", "rsync");
+ put("40016", "rbls");
+ put("40017", "psn");
+ put("40018", "portmap_rpc");
+ put("40019", "opaserv");
+ put("40020", "noction");
+ put("40021", "netmfp");
+ put("40022", "merakicloud");
+ put("40023", "kaspersky");
+ put("40024", "kaseya");
+ put("40025", "jedi_academy");
+ put("40026", "jedi");
+ put("40027", "imesh");
+ put("40028", "imesh");
+ put("40029", "icp");
+ put("40030", "gsm");
+ put("40031", "flash");
+ put("40032", "dxp");
+ put("40033", "duelingnetwork");
+ put("40034", "amp");
+ put("40035", "zoom");
+ put("40036", "zoom_tcp");
+ put("40037", "vivox");
+ put("40038", "ventrilo");
+ put("40039", "teamspeak");
+ put("40040", "zabbix");
+ put("40041", "yahoo_webcam");
+ put("40042", "xunyou");
+ put("40043", "weblogic");
+ put("40044", "vmware");
+ put("40045", "rpcscan");
+ put("40046", "razor");
+ put("40047", "netcattv_udp");
+ put("40048", "netcattv");
+ put("40049", "n2ping");
+ put("40050", "mzinga");
+ put("40051", "munin");
+ put("40052", "linkproof");
+ put("40053", "ipsharkk");
+ put("40054", "ipop");
+ put("40055", "idrivesync");
+ put("40056", "epson");
+ put("40057", "dash");
+ put("40058", "amanda");
+ put("40059", "airmedia");
+ put("40060", "vpnunlimited_tcp");
+ put("40061", "vpnrobot_udp");
+ put("40062", "vpnrobot_tcp");
+ put("40063", "turbovpn");
+ put("40064", "snapvpn");
+ put("40065", "forticlient_sslvpn");
+ put("40066", "cisco_vpn");
+ put("40067", "cisco_sslvpn");
+ put("40068", "xiami");
+ put("40069", "spotify_bcast");
+ put("40070", "spotify");
+ put("40071", "kuguo");
+ put("40072", "baofeng_udp");
+ put("40073", "baofeng_tcp");
+ put("40074", "youku");
+ put("40075", "youku");
+ put("40076", "vodlocker");
+ put("40077", "twitch_irc");
+ put("40078", "twitcasting");
+ put("40079", "tvants");
+ put("40080", "sopcast");
+ put("40081", "qqlive");
+ put("40082", "qqlive_tcp");
+ put("40083", "ppstream");
+ put("40084", "pplive");
+ put("40085", "pandatv");
+ put("40086", "kuaibo");
+ put("40087", "kankan");
+ put("40088", "kankan_tcp");
+ put("40089", "funshion");
+ put("40090", "funshion");
+ put("40091", "freechal");
+ put("40092", "douyu");
+ put("40093", "acestream");
+ put("40094", "telecomkey");
+ put("40095", "supl");
+ put("40096", "spamfighter");
+ put("40097", "norton");
+ put("40098", "foscam");
+ put("40099", "fortinet");
+ put("40100", "dtls");
+ put("40101", "mms");
+ put("40102", "gprs_tunnel");
+ put("40103", "giop");
+ put("40104", "kazaa");
+ put("40105", "ares");
+ put("40106", "ares");
+ put("40107", "xunlei_jsq");
+ put("40108", "xunlei_el");
+ put("40109", "xunlei");
+ put("40110", "xunlei");
+ put("40111", "wuala");
+ put("40112", "winmx");
+ put("40113", "umeye");
+ put("40114", "qqdownload");
+ put("40115", "pando");
+ put("40116", "pando");
+ put("40117", "orbit");
+ put("40118", "nntps");
+ put("40119", "hamachi");
+ put("40120", "hamachi");
+ put("40121", "emule");
+ put("40122", "emule");
+ put("40123", "btsync");
+ put("40124", "btsync");
+ put("40125", "wns");
+ put("40126", "traceroute");
+ put("40127", "serialnumberd");
+ put("40128", "punkbuster");
+ put("40129", "maxicloud");
+ put("40130", "dvrns");
+ put("40131", "driveshare");
+ put("40132", "doyo");
+ put("40133", "dell_backup");
+ put("40134", "avast_secure_dns");
+ put("40135", "storm_worm");
+ put("40136", "glupteba");
+ put("40137", "pyzor");
+ put("40138", "xfire_p2p");
+ put("40139", "webex");
+ put("40140", "starleaf");
+ put("40141", "paltalk");
+ put("40142", "palringo");
+ put("40143", "omegle");
+ put("40144", "msn");
+ put("40145", "line_udp");
+ put("40146", "line");
+ put("40147", "kik");
+ put("40148", "kakao");
+ put("40149", "ipmsg");
+ put("40150", "goku");
+ put("40151", "fring");
+ put("40152", "douyu_chat");
+ put("40153", "gotomeeting");
+ put("40154", "chatango");
+ put("40155", "appearin");
+ put("40156", "graalonlineera");
+ put("40157", "wolfet");
+ put("40158", "wizard101");
+ put("40159", "weiqi");
+ put("40160", "warthunder");
+ put("40161", "warcraft3");
+ put("40162", "vainglory");
+ put("40163", "tremulous");
+ put("40164", "trackmania");
+ put("40165", "torchlight2");
+ put("40166", "thecrew");
+ put("40167", "tetrisonline");
+ put("40168", "tera");
+ put("40169", "tankix");
+ put("40170", "talesrunner");
+ put("40171", "steamfriends");
+ put("40172", "steam_inhomebroadcast");
+ put("40173", "steam");
+ put("40174", "steam");
+ put("40175", "starcraft");
+ put("40176", "starcitizen");
+ put("40177", "smite");
+ put("40178", "smite_tcp");
+ put("40179", "silkroadonline");
+ put("40180", "second_life");
+ put("40181", "second_life");
+ put("40182", "sanandreas_mp");
+ put("40183", "runescape");
+ put("40184", "robocraft");
+ put("40185", "risingstorm");
+ put("40186", "quake");
+ put("40187", "ps4_remoteplay");
+ put("40188", "planetside2");
+ put("40189", "pdbox");
+ put("40190", "panipani");
+ put("40191", "overwatch");
+ put("40192", "noe");
+ put("40193", "nintendo");
+ put("40194", "newerth");
+ put("40195", "nwn");
+ put("40196", "ncsoft");
+ put("40197", "mta");
+ put("40198", "minecraft");
+ put("40199", "maplestory_china");
+ put("40200", "lol");
+ put("40201", "lifeforge");
+ put("40202", "jx3online");
+ put("40203", "heroes_generals");
+ put("40204", "hearthstone");
+ put("40205", "harveys");
+ put("40206", "haloonline");
+ put("40207", "h1z1");
+ put("40208", "gearsofwar");
+ put("40209", "garena");
+ put("40210", "gangsofspace");
+ put("40211", "ffxiv");
+ put("40212", "ea_games");
+ put("40213", "dota2");
+ put("40214", "discord");
+ put("40215", "diablo3");
+ put("40216", "diablo2");
+ put("40217", "destiny_udp");
+ put("40218", "destiny");
+ put("40219", "demonware");
+ put("40220", "cryptic");
+ put("40221", "crossout");
+ put("40222", "crossfire");
+ put("40223", "crossfire_tcp");
+ put("40224", "csoriginal");
+ put("40225", "conquer");
+ put("40226", "combatarms_p2p");
+ put("40227", "combatarms");
+ put("40228", "cod");
+ put("40229", "clashofclans");
+ put("40230", "chivalry");
+ put("40231", "blizzard");
+ put("40232", "battlefield");
+ put("40233", "ark");
+ put("40234", "clubbox");
+ put("40235", "norton_backup");
+ put("40236", "baiduyun_p2p");
+ put("40237", "akamai_transfer");
+ put("40238", "git");
+ put("40239", "sql_worm");
+ put("40240", "postgresql");
+ put("40241", "mysql");
+ put("40242", "db2");
+ put("40243", "tenfivecoin");
+ put("40244", "stratum");
+ put("40245", "litecoin");
+ put("40246", "fuckcoin");
+ put("40247", "dogecoin");
+ put("40248", "zynga");
+ put("40249", "youdao_dict");
+ put("40250", "yahoo_games");
+ put("40251", "xymon");
+ put("40252", "ubisoft_games");
+ put("40253", "jedi");
+ put("40254", "tencent_games");
+ put("40255", "TaobaoCDN");
+ put("40256", "ourworld");
+ put("40257", "msoffice_mac");
+ put("40258", "dianping_udp");
+ put("40259", "dianping_tcp");
+ put("40260", "backweb");
+ put("40261", "airdroid");
+ put("40262", "natpmp");
+ put("40264", "id");
+ put("40265", "s7comm");
+ put("40266", "xmpps");
+ put("40267", "slp");
+ put("40268", "msnc");
+ put("40269", "msn_cache");
+ put("40270", "mp2p");
+ put("40271", "mp2p");
+ put("40272", "llp2p");
+ put("40273", "lansync");
+ put("40274", "antcoin");
+ put("40275", "directconnect");
+ put("40276", "directconnect");
+ put("40277", "whois");
+ put("40278", "zalo_call");
+ put("40279", "yy_udp");
+ put("40280", "yuanfudao");
+ put("40281", "xlsp");
+ put("40282", "worm_22105");
+ put("40283", "wireguard");
+ put("40284", "vxworks_exploit");
+ put("40285", "unreal");
+ put("40286", "tox");
+ put("40287", "tf2");
+ put("40288", "talesrunner_udp");
+ put("40289", "steam_localbroadcast");
+ put("40290", "rulesofsurvival");
+ put("40291", "rrshare");
+ put("40292", "rocket_league");
+ put("40293", "real");
+ put("40294", "rdp_udp");
+ put("40295", "ramseydash");
+ put("40296", "raknet");
+ put("40297", "qvod_udp");
+ put("40298", "qqspeedmobile_udp");
+ put("40299", "qqpcmgr");
+ put("40300", "paladins");
+ put("40301", "nvidia_gamestream");
+ put("40302", "ntp_reflect");
+ put("40303", "nopayload");
+ put("40304", "netcore_scan");
+ put("40305", "netbios");
+ put("40306", "mystery_emule");
+ put("40307", "mystery_bt_udp");
+ put("40308", "mystery_02_36");
+ put("40309", "msn_video");
+ put("40310", "moonhunters");
+ put("40311", "moh");
+ put("40312", "loadout");
+ put("40313", "kingofglory_udp");
+ put("40314", "hots");
+ put("40315", "hollachat");
+ put("40316", "heroesevolved");
+ put("40317", "heliborne");
+ put("40318", "halflife");
+ put("40319", "gnutella_weak");
+ put("40320", "gnutella");
+ put("40321", "gnutella2");
+ put("40322", "ganglia");
+ put("40323", "gamespy");
+ put("40324", "freefire");
+ put("40325", "feitwo");
+ put("40326", "eye");
+ put("40327", "dcc");
+ put("40328", "csgo");
+ put("40329", "contract_wars");
+ put("40330", "codmobile");
+ put("40331", "cloudflare_warp");
+ put("40332", "classin_udp");
+ put("40333", "cisco_ipsec");
+ put("40334", "cirn");
+ put("40335", "checkpoint_rdp");
+ put("40336", "chargen_exploit");
+ put("40337", "canon_mfnp");
+ put("40338", "cacaoweb_udp");
+ put("40339", "assettocorsa");
+ put("40340", "arma_server");
+ put("40341", "arma3_server");
+ put("40342", "ard");
+ put("40343", "aachen_udp");
+ put("40344", "360p2p");
+ put("40345", "360cn");
+ put("40346", "yy_tcp");
+ put("40347", "yahoo_error");
+ put("40348", "wow");
+ put("40349", "web_junk");
+ put("40350", "webex_stun");
+ put("40351", "vhdp2p");
+ put("40352", "utherverse");
+ put("40353", "trojan_win32_generic_sb");
+ put("40354", "tip");
+ put("40355", "thedivision");
+ put("40356", "tensafe");
+ put("40357", "telnet_exploit");
+ put("40358", "tds");
+ put("40359", "tankionline");
+ put("40360", "ssjj");
+ put("40361", "speedtest");
+ put("40362", "speedin");
+ put("40363", "speedify");
+ put("40364", "skyforge");
+ put("40365", "saszombieassault4");
+ put("40366", "rrtv");
+ put("40367", "revolver_nblbt");
+ put("40368", "remote_manipulator");
+ put("40369", "relay");
+ put("40370", "rejection");
+ put("40371", "realmofthemadgod");
+ put("40372", "rabbitmq");
+ put("40373", "qvod");
+ put("40374", "qqspeedmobile_tcp");
+ put("40375", "qcloud_ilvb");
+ put("40376", "psn_store");
+ put("40377", "pathofexile");
+ put("40378", "nsq");
+ put("40379", "notes_rpc");
+ put("40380", "nopayload");
+ put("40381", "nomachine");
+ put("40382", "nofirstpkt");
+ put("40383", "ndt_tput");
+ put("40384", "naverp2p");
+ put("40385", "msnv");
+ put("40386", "mongo");
+ put("40387", "message4u");
+ put("40388", "kingofglory_tcp");
+ put("40389", "kaspersky");
+ put("40390", "java");
+ put("40391", "ipfs");
+ put("40392", "invalid_smtp");
+ put("40393", "invalid_pop");
+ put("40394", "invalid_http");
+ put("40395", "invalid");
+ put("40396", "invalid_bittorrent");
+ put("40397", "ihexin");
+ put("40398", "icep");
+ put("40399", "ica");
+ put("40400", "http_tunnel");
+ put("40401", "http_nonstandard");
+ put("40402", "hots_tcp");
+ put("40403", "guildwars2");
+ put("40404", "gnutella");
+ put("40405", "gcafe_updater");
+ put("40406", "gamespy");
+ put("40407", "ftpdata");
+ put("40408", "ftpcontrol");
+ put("40409", "fliggy");
+ put("40410", "filenori");
+ put("40411", "fb_message");
+ put("40412", "eye");
+ put("40413", "dnf");
+ put("40414", "dahua_tcp");
+ put("40415", "cod_waw");
+ put("40416", "classin_tcp");
+ put("40417", "cacaoweb");
+ put("40418", "bwsyncandshare");
+ put("40419", "blackdesert");
+ put("40420", "bitextend");
+ put("40421", "beam");
+ put("40422", "badbaidu");
+ put("40423", "apple_push");
+ put("40424", "afp");
+ put("40425", "4d");
+ put("40426", "360safeguard");
+ put("40427", "300heroes");
+ put("10081", "sctp");
+ put("40501", "fasp");
+ put("40502", "bjnp");
+ }
+
+ };
+
+ /**
+ * 协议类型-2019-12-19更新
+ */
+ public static final Map<String, String> PROTOCOL_TYPE = new HashMap<String, String>() {
+ private static final long serialVersionUID = -1030842785690504144L;
+
+ {
+ put("0", "超出协议范筹-0");
+ put("10000", "超出协议范筹");
+ put("10001", "TCP");
+ put("10002", "UDP");
+ put("10003", "DNS");
+ put("10004", "FTP");
+ put("10005", "FTPS");
+ put("10006", "GRE");
+ put("10007", "HTTP");
+ put("10008", "HTTPS");
+ put("10009", "ICMP");
+ put("10010", "IKE");
+ put("10011", "IMAP");
+ put("10012", "IMAPS");
+ put("10013", "IPSEC");
+ put("10014", "XMPP");
+ put("10015", "L2TP");
+ put("10016", "NTP");
+ put("10017", "POP3");
+ put("10018", "POP3SSL");
+ put("10019", "PPTP");
+ put("10020", "Quic");
+ put("10021", "SIP");
+ put("10022", "SMB");
+ put("10023", "SMTP");
+ put("10024", "SMTPS");
+ put("10025", "SPDY");
+ put("10028", "SSH");
+ put("10029", "SSL");
+ put("10030", "SOCKS");
+ put("10031", "BITTORRENT");
+ put("10032", "RTSP");
+ put("10033", "TELNET");
+ put("10034", "UTP");
+ put("10035", "FASTTRACK");
+ put("10036", "SKINNY");
+ put("10037", "IAX");
+ put("10038", "MGCP");
+ put("10039", "RTCP");
+ put("10040", "RTP");
+ put("10041", "VNC");
+ put("10042", "XDMCP");
+ put("10043", "RDP");
+ put("10044", "AIMINI");
+ put("10045", "IPP");
+ put("10046", "NFS");
+ put("10047", "TFTP");
+ put("10048", "BGP");
+ put("10049", "DHCP");
+ put("10050", "DHCPV6");
+ put("10051", "FINGER");
+ put("10052", "KERBEROS");
+ put("10053", "LDAP");
+ put("10054", "MDNS");
+ put("10055", "NNTP");
+ put("10056", "SNMP");
+ put("10057", "SSDP");
+ put("10058", "SYSLOG");
+ put("10059", "WHOIS");
+ put("10060", "RADIUS");
+ put("10061", "OPENVPN");
+ put("10062", "STUN");
+ put("10063", "TEREDO");
+ put("10064", "GTP");
+ put("10065", "RTMP");
+ put("10066", "Chargen_TCP_UDP");
+ put("10067", "LLMNR_UDP");
+ put("10068", "NBNS_UDP");
+ put("10069", "NETBIOS");
+ put("10070", "DirectDownloadLink");
+ put("10071", "I23V5");
+ put("10072", "DirectConnect");
+ put("10073", "OFF");
+ put("10074", "OGG");
+ put("10075", "MPEG");
+ put("10076", "IRC");
+ put("10077", "Jabber");
+ put("10078", "VRRP");
+ put("10079", "IGMP");
+ put("10080", "EGP");
+ put("10081", "SCTP");
+ put("10082", "OSPF");
+ put("10083", "IPinIP");
+ put("10084", "ICMPv6");
+ put("10085", "DCE_RPC");
+ put("10086", "NetFlow_IPFIX");
+ put("10087", "sFlow");
+ put("10088", "HTTPConnect_SSLOverHTTP");
+ put("10089", "SAP");
+ put("10090", "UPnP");
+ put("10091", "H323");
+ put("10092", "Megaco");
+ put("10094", "BACNET");
+ put("10096", "BJNP");
+ put("10097", "CGQ");
+ put("10098", "DAHUA");
+ put("10099", "DCC");
+ put("10100", "KADEMLIA");
+ put("10101", "LANSYNC");
+ put("10102", "LDAP_AD");
+ put("10103", "LLP2P");
+ put("10104", "MFNP");
+ put("10105", "MP2P");
+ put("10106", "MSN_Cache");
+ put("10107", "MSN_Video");
+ put("10108", "MSNC");
+ put("10109", "NetFlow");
+ put("10110", "NOTES_RPC");
+ put("10111", "ESP");
+ put("10112", "Fbcdn_SSL");
+ put("10113", "Forticlient_SSLVPN");
+ put("10114", "RFB");
+ put("10115", "RTMFP");
+ put("10117", "SLP");
+ put("10118", "Steam_inhomebroadcast");
+ put("10119", "Steam_localbroadcast");
+ put("10120", "TPKT");
+ put("10121", "XMPPS");
+ put("10122", "S7COMM");
+ put("10123", "CitrixCGP");
+ put("10124", "ID_Protocol");
+ put("10125", "SMTP_Secure");
+ put("10126", "NAT_PMP");
+ put("19999", "APP defined");
+
+ }
+
+ };
+
+
+ /**
+ * ISO 3166-1 alpha2
+ */
+ public static final Map<String, String> ISO_3166_1_ALPHA_2 = new HashMap<String, String>() {
+ private static final long serialVersionUID = -6972673762779232428L;
+
+ {
+
+ put("阿富汗", "AF");
+ put("奥兰", "AX");
+ put("阿尔巴尼亚", "AL");
+ put("阿尔及利亚", "DZ");
+ put("美属萨摩亚", "AS");
+ put("安道尔", "AD");
+ put("安哥拉", "AO");
+ put("安圭拉", "AI");
+ put("南极洲", "AQ");
+ put("安提瓜和巴布达", "AG");
+ put("阿根廷", "AR");
+ put("亚美尼亚", "AM");
+ put("阿鲁巴", "AW");
+ put("澳大利亚", "AU");
+ put("奥地利", "AT");
+ put("阿塞拜疆", "AZ");
+ put("巴哈马", "BS");
+ put("巴林", "BH");
+ put("孟加拉国", "BD");
+ put("巴巴多斯", "BB");
+ put("白俄罗斯", "BY");
+ put("比利时", "BE");
+ put("伯利兹", "BZ");
+ put("贝宁", "BJ");
+ put("百慕大", "BM");
+ put("不丹", "BT");
+ put("玻利维亚", "BO");
+ put("荷兰加勒比区", "BQ");
+ put("波斯尼亚和黑塞哥维那", "BA");
+ put("博茨瓦纳", "BW");
+ put("布韦岛", "BV");
+ put("巴西", "BR");
+ put("英属印度洋领地", "IO");
+ put("文莱", "BN");
+ put("保加利亚", "BG");
+ put("布基纳法索", "BF");
+ put("布隆迪", "BI");
+ put("佛得角", "CV");
+ put("柬埔寨", "KH");
+ put("喀麦隆", "CM");
+ put("加拿大", "CA");
+ put("开曼群岛", "KY");
+ put("中非", "CF");
+ put("乍得", "TD");
+ put("智利", "CL");
+ put("中国", "CN");
+ put("圣诞岛", "CX");
+ put("科科斯(基林)群岛", "CC");
+ put("哥伦比亚", "CO");
+ put("科摩罗", "KM");
+ put("刚果(布)", "CG");
+ put("刚果(金)", "CD");
+ put("库克群岛", "CK");
+ put("哥斯达黎加", "CR");
+ put("科特迪瓦", "CI");
+ put("克罗地亚", "HR");
+ put("古巴", "CU");
+ put("库拉索", "CW");
+ put("塞浦路斯", "CY");
+ put("捷克", "CZ");
+ put("丹麦", "DK");
+ put("吉布提", "DJ");
+ put("多米尼克", "DM");
+ put("多米尼加", "DO");
+ put("厄瓜多尔", "EC");
+ put("埃及", "EG");
+ put("萨尔瓦多", "SV");
+ put("赤道几内亚", "GQ");
+ put("厄立特里亚", "ER");
+ put("爱沙尼亚", "EE");
+ put("埃塞俄比亚", "ET");
+ put("福克兰群岛", "FK");
+ put("法罗群岛", "FO");
+ put("斐济", "FJ");
+ put("芬兰", "FI");
+ put("法国", "FR");
+ put("法属圭亚那", "GF");
+ put("法属波利尼西亚", "PF");
+ put("法属南方和南极洲领地", "TF");
+ put("加蓬", "GA");
+ put("冈比亚", "GM");
+ put("格鲁吉亚", "GE");
+ put("德国", "DE");
+ put("加纳", "GH");
+ put("直布罗陀", "GI");
+ put("希腊", "GR");
+ put("格陵兰", "GL");
+ put("格林纳达", "GD");
+ put("瓜德罗普", "GP");
+ put("关岛", "GU");
+ put("危地马拉", "GT");
+ put("根西", "GG");
+ put("几内亚", "GN");
+ put("几内亚比绍", "GW");
+ put("圭亚那", "GY");
+ put("海地", "HT");
+ put("赫德岛和麦克唐纳群岛", "HM");
+ put("梵蒂冈", "VA");
+ put("洪都拉斯", "HN");
+ put("香港", "HK");
+ put("匈牙利", "HU");
+ put("冰岛", "IS");
+ put("印度", "IN");
+ put("印尼", "ID");
+ put("伊朗", "IR");
+ put("伊拉克", "IQ");
+ put("爱尔兰", "IE");
+ put("马恩岛", "IM");
+ put("以色列", "IL");
+ put("意大利", "IT");
+ put("牙买加", "JM");
+ put("日本", "JP");
+ put("泽西", "JE");
+ put("约旦", "JO");
+ put("哈萨克斯坦", "KZ");
+ put("肯尼亚", "KE");
+ put("基里巴斯", "KI");
+ put("朝鲜", "KP");
+ put("韩国", "KR");
+ put("科威特", "KW");
+ put("吉尔吉斯斯坦", "KG");
+ put("老挝", "LA");
+ put("拉脱维亚", "LV");
+ put("黎巴嫩", "LB");
+ put("莱索托", "LS");
+ put("利比里亚", "LR");
+ put("利比亚", "LY");
+ put("列支敦士登", "LI");
+ put("立陶宛", "LT");
+ put("卢森堡", "LU");
+ put("澳门", "MO");
+ put("马其顿", "MK");
+ put("马达加斯加", "MG");
+ put("马拉维", "MW");
+ put("马来西亚", "MY");
+ put("马尔代夫", "MV");
+ put("马里", "ML");
+ put("马耳他", "MT");
+ put("马绍尔群岛", "MH");
+ put("马提尼克", "MQ");
+ put("毛里塔尼亚", "MR");
+ put("毛里求斯", "MU");
+ put("马约特", "YT");
+ put("墨西哥", "MX");
+ put("密克罗尼西亚联邦", "FM");
+ put("摩尔多瓦", "MD");
+ put("摩纳哥", "MC");
+ put("蒙古国", "MN");
+ put("黑山", "ME");
+ put("蒙特塞拉特", "MS");
+ put("摩洛哥", "MA");
+ put("莫桑比克", "MZ");
+ put("缅甸", "MM");
+ put("纳米比亚", "NA");
+ put("瑙鲁", "NR");
+ put("尼泊尔", "NP");
+ put("荷兰", "NL");
+ put("新喀里多尼亚", "NC");
+ put("新西兰", "NZ");
+ put("尼加拉瓜", "NI");
+ put("尼日尔", "NE");
+ put("尼日利亚", "NG");
+ put("纽埃", "NU");
+ put("诺福克岛", "NF");
+ put("北马里亚纳群岛", "MP");
+ put("挪威", "NO");
+ put("阿曼", "OM");
+ put("巴基斯坦", "PK");
+ put("帕劳", "PW");
+ put("巴勒斯坦", "PS");
+ put("巴拿马", "PA");
+ put("巴布亚新几内亚", "PG");
+ put("巴拉圭", "PY");
+ put("秘鲁", "PE");
+ put("菲律宾", "PH");
+ put("皮特凯恩群岛", "PN");
+ put("波兰", "PL");
+ put("葡萄牙", "PT");
+ put("波多黎各", "PR");
+ put("卡塔尔", "QA");
+ put("留尼汪", "RE");
+ put("罗马尼亚", "RO");
+ put("俄罗斯", "RU");
+ put("卢旺达", "RW");
+ put("圣巴泰勒米", "BL");
+ put("圣赫勒拿、阿森松和特里斯坦-达库尼亚", "SH");
+ put("圣基茨和尼维斯", "KN");
+ put("圣卢西亚", "LC");
+ put("法属圣马丁", "MF");
+ put("圣皮埃尔和密克隆", "PM");
+ put("圣文森特和格林纳丁斯", "VC");
+ put("萨摩亚", "WS");
+ put("圣马力诺", "SM");
+ put("圣多美和普林西比", "ST");
+ put("沙特阿拉伯", "SA");
+ put("塞内加尔", "SN");
+ put("塞尔维亚", "RS");
+ put("塞舌尔", "SC");
+ put("塞拉利昂", "SL");
+ put("新加坡", "SG");
+ put("圣马丁", "SX");
+ put("斯洛伐克", "SK");
+ put("斯洛文尼亚", "SI");
+ put("所罗门群岛", "SB");
+ put("索马里", "SO");
+ put("南非", "ZA");
+ put("南乔治亚和南桑威奇群岛", "GS");
+ put("南苏丹", "SS");
+ put("西班牙", "ES");
+ put("斯里兰卡", "LK");
+ put("苏丹", "SD");
+ put("苏里南", "SR");
+ put("斯瓦尔巴和扬马延", "SJ");
+ put("斯威士兰", "SZ");
+ put("瑞典", "SE");
+ put("瑞士", "CH");
+ put("叙利亚", "SY");
+ put("台湾", "TW");
+ put("塔吉克斯坦", "TJ");
+ put("坦桑尼亚", "TZ");
+ put("泰国", "TH");
+ put("东帝汶", "TL");
+ put("多哥", "TG");
+ put("托克劳", "TK");
+ put("汤加", "TO");
+ put("特立尼达和多巴哥", "TT");
+ put("突尼斯", "TN");
+ put("土耳其", "TR");
+ put("土库曼斯坦", "TM");
+ put("特克斯和凯科斯群岛", "TC");
+ put("图瓦卢", "TV");
+ put("乌干达", "UG");
+ put("乌克兰", "UA");
+ put("阿联酋", "AE");
+ put("英国", "GB");
+ put("美国", "US");
+ put("美国本土外小岛屿", "UM");
+ put("乌拉圭", "UY");
+ put("乌兹别克斯坦", "UZ");
+ put("瓦努阿图", "VU");
+ put("委内瑞拉", "VE");
+ put("越南", "VN");
+ put("英属维尔京群岛", "VG");
+ put("美属维尔京群岛", "VI");
+ put("瓦利斯和富图纳", "WF");
+ put("西撒哈拉", "EH");
+ put("也门", "YE");
+ put("赞比亚", "ZM");
+ put("津巴布韦", "ZW");
+
+ }
+
+ };
+
+
+} \ No newline at end of file