package com.nis.util; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringEscapeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import com.google.common.collect.Lists; import com.googlecode.ipv6.IPv6Address; import com.googlecode.ipv6.IPv6Network; import com.nis.domain.basics.AsnIpCfg; import com.nis.domain.configuration.AppIpCfg; import com.nis.domain.configuration.BaseCfg; import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.ComplexkeywordCfg; import com.nis.domain.configuration.FileDigestCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.maat.MaatCfg.DigestCfg; import com.nis.domain.maat.MaatCfg.GroupCfg; import com.nis.domain.maat.MaatCfg.IpCfg; import com.nis.domain.maat.MaatCfg.NumBoundaryCfg; import com.nis.domain.maat.MaatCfg.StringCfg; public class ConfigConvertUtil { private static Logger logger = LoggerFactory.getLogger(ConfigConvertUtil.class); /** * 配置域转换 * @param ipList * @param strList * @param complexStrList * @param numList * @param fileList * @param regionIds * @param groupIds * @param entity * @param compileId * @param auditTime * @param groupRelationList * @param ipRegionList * @param strRegionList * @param numRegionList * @param digestRegionList * @param areaIpRegionList * @param userRegion */ public static String configCovert(List ipList,List strList,List complexStrList, List numList, List fileList,List regionIds,List groupIds,BaseCfg entity, Integer compileId,Date auditTime,List groupRelationList, List ipRegionList, List strRegionList, List numRegionList, List digestRegionList, List areaIpRegionList,String userRegion){ List list1 = new ArrayList(); List list2 = new ArrayList(); List list3 = new ArrayList(); List list4 = new ArrayList(); List list5 = new ArrayList(); if(ipList.size()>0){ for(int index=0;index0){ ipList.removeAll(list1); Map map = cfgToMaatConvert(ipRegionList,list1,1,groupRelationList); groupRelationList=map.get("groupList"); ipRegionList=map.get("dstList"); if(map.get("numRegionList")!=null){ numRegionList.addAll(map.get("numRegionList")); } } if(list2.size()>0){ strList.removeAll(list2); Map map = cfgToMaatConvert(strRegionList,list2,2,groupRelationList); groupRelationList=map.get("groupList"); strRegionList=map.get("dstList"); } if(list3.size()>0){ complexStrList.removeAll(list3); Map map = cfgToMaatConvert(strRegionList,list3,3,groupRelationList); groupRelationList=map.get("groupList"); strRegionList=map.get("dstList"); } if(list4.size()>0){ numList.removeAll(list4); Map map = cfgToMaatConvert(numRegionList,list4,4,groupRelationList); groupRelationList=map.get("groupList"); numRegionList=map.get("dstList"); } if(list5.size()>0){ fileList.removeAll(list5); Map map = cfgToMaatConvert(digestRegionList,list5,5,groupRelationList); groupRelationList=map.get("groupList"); digestRegionList=map.get("dstList"); } return userRegion; } // asn IP 复用转换 public static List groupReuseCfgAddRemoveConvert(List> ipCfgList, Integer isValid, Integer groupId) { logger.warn("convert data start"); long start = System.currentTimeMillis(); Date opTime = new Date(); List maatIpList = new ArrayList<>(); if (ipCfgList.size() > 0) { // 只用一次instanceof,取代循环中每次都用一次instanceof if (ipCfgList.get(0) instanceof AsnIpCfg) { for (BaseCfg _cfg : ipCfgList) { IpCfg cfg = new IpCfg(); BaseIpCfg baseIpCfg = new BaseIpCfg(); AsnIpCfg asnIpCfg = (AsnIpCfg) _cfg; BeanUtils.copyProperties(asnIpCfg, baseIpCfg); BeanUtils.copyProperties(baseIpCfg, cfg); cfg.setGroupId(asnIpCfg.getAsnIpGroup()); cfg.setRegionId(asnIpCfg.getRegionId()); String userRegion = "ASN_ID=AS" + asnIpCfg.getUserRegion1(); cfg.setUserRegion(userRegion); cfg.setIsValid(isValid); cfg.setAuditTime(opTime); List cfgs = ipConvert(cfg, baseIpCfg); maatIpList.addAll(cfgs); } } else if (ipCfgList.get(0) instanceof AppIpCfg) { for (BaseCfg _cfg : ipCfgList) { IpCfg cfg = new IpCfg(); BaseIpCfg baseIpCfg = new BaseIpCfg(); AppIpCfg appIpCfg = (AppIpCfg) _cfg; BeanUtils.copyProperties(appIpCfg, baseIpCfg); BeanUtils.copyProperties(baseIpCfg, cfg); cfg.setGroupId(groupId); cfg.setRegionId(Integer.parseInt(appIpCfg.getUserRegion1())); String userRegion = "APP_ID=" + appIpCfg.getAppCode(); cfg.setUserRegion(userRegion); cfg.setIsValid(isValid); cfg.setAuditTime(opTime); List cfgs = ipConvert(cfg, baseIpCfg); maatIpList.addAll(cfgs); } } } long end = System.currentTimeMillis(); logger.warn("convert data finish,cost:" + (end - start)); return maatIpList; } /** * 界面配置list转换为服务接口端的list,用于批量下发时,regionId,groupId已在该方法前被批量获取 * * @param * @param * @param dstList * @param srcList * @param cfgType,1为IP类型,2为字符串类型,3为增强字符串,4数值类型,5摘要类,6回调类[但字符串类域配置和增强字符串域配置在接口参数中同属于strRegionList] * @param baseCfg,配置基本信息 * @param groupRelationList * 配置分组列表 * @return */ public static Map cfgToMaatConvert(List dstList, List srcList, Integer cfgType,List groupRelationList) { Map map = new HashMap(); if (cfgType == 1) { List numRegionList = new ArrayList(); Integer groupId = 0; Integer numGroupId = 0; for (int i = 0; i < srcList.size(); i++) { List regionIdList = Lists.newArrayList(); T srcCfg = srcList.get(i); BaseIpCfg baseIpCfg = new BaseIpCfg(); BeanUtils.copyProperties(srcCfg, baseIpCfg); regionIdList.add(baseIpCfg.getRegionId()); IpCfg cfg = new IpCfg(); BeanUtils.copyProperties(baseIpCfg, cfg); //多条IP配置属于同一个分组 if (groupId == 0) { GroupCfg group = new GroupCfg(); groupId = baseIpCfg.getGroupId(); group.setGroupId(groupId); group.setCompileId(baseIpCfg.getCompileId()); group.setAuditTime(baseIpCfg.getAuditTime()); group.setIsValid(baseIpCfg.getIsValid()); groupRelationList.add(group); } cfg.setGroupId(groupId); cfg.setAuditTime(baseIpCfg.getAuditTime()); cfg.setIsValid(baseIpCfg.getIsValid()); List cfgs = ipConvert(cfg, baseIpCfg); if (cfgs.size() > 1) { List ids = ConfigServiceUtil.getId(3, cfgs.size() - 1); regionIdList.addAll(ids); } for (int j = i; j < cfgs.size() + i; j++) { cfgs.get(j - i).setRegionId(regionIdList.get(j)); } dstList.addAll(cfgs); // 如果protocolId非空非零,需要构造数值型域配置,多条相同协议的IP只需要一条数值域配置(目前没有不同协议IP&情况) if (baseIpCfg.getProtocolId() != null && baseIpCfg.getProtocolId() != 0) { if (numGroupId == 0) { GroupCfg group1 = new GroupCfg(); group1.setGroupId(ConfigServiceUtil.getId(2, 1).get(0)); group1.setCompileId(baseIpCfg.getCompileId()); group1.setAuditTime(baseIpCfg.getAuditTime()); group1.setIsValid(baseIpCfg.getIsValid()); groupRelationList.add(group1); NumBoundaryCfg numCfg = new NumBoundaryCfg(); numCfg.initDefaultValue(); numCfg.setLowBoundary(baseIpCfg.getProtocolId()); numCfg.setUpBoundary(baseIpCfg.getProtocolId()); numCfg.setRegionId(ConfigServiceUtil.getId(3, 1).get(0)); numCfg.setAuditTime(baseIpCfg.getAuditTime()); numCfg.setGroupId(group1.getGroupId()); numCfg.setIsValid(baseIpCfg.getIsValid()); numRegionList.add(numCfg); map.put("numRegionList", numRegionList); numGroupId++; } } } } else if (cfgType == 2 || cfgType == 3) { for (int i = 0; i < srcList.size(); i++) { // 一条业务配置创建一个分组 BaseCfg baseCfg = new BaseCfg(); BeanUtils.copyProperties(srcList.get(i), baseCfg,new String[]{"menuNameCode"});//拷贝公共属性 GroupCfg group = new GroupCfg(); StringCfg cfg = new StringCfg(); BeanUtils.copyProperties(srcList.get(i), cfg,new String[]{"menuNameCode"});//拷贝公共属性以及私有属性 group.setGroupId(baseCfg.getGroupId()); group.setCompileId(baseCfg.getCompileId()); group.setAuditTime(baseCfg.getAuditTime()); group.setIsValid(baseCfg.getIsValid()); groupRelationList.add(group); cfg.setGroupId(group.getGroupId()); cfg.setRegionId(baseCfg.getRegionId()); cfg.setAuditTime(baseCfg.getAuditTime()); cfg.setIsValid(baseCfg.getIsValid()); // 处理配置关键字转译 cfg.setCfgKeywords(keywordsEscape(cfg.getCfgKeywords())); // 增强字符串转换 cfg.setDistrict(keywordsEscape(cfg.getDistrict())); dstList.add(cfg); } } else if (cfgType == 4) { for (int i = 0; i < srcList.size(); i++) { BaseCfg baseCfg = new BaseCfg(); BeanUtils.copyProperties(srcList.get(i), baseCfg);//拷贝公共属性 // 一条业务配置创建一个分组 com.nis.domain.maat.MaatCfg.NumBoundaryCfg cfg = new com.nis.domain.maat.MaatCfg.NumBoundaryCfg(); BeanUtils.copyProperties(srcList.get(i), cfg); GroupCfg group = new GroupCfg(); group.setGroupId(baseCfg.getGroupId()); group.setCompileId(baseCfg.getCompileId()); group.setAuditTime(baseCfg.getAuditTime()); group.setIsValid(baseCfg.getIsValid()); groupRelationList.add(group); cfg.setGroupId(group.getGroupId()); cfg.setRegionId(baseCfg.getRegionId()); cfg.setAuditTime(baseCfg.getAuditTime()); cfg.setIsValid(baseCfg.getIsValid()); dstList.add(cfg); } } else if (cfgType == 5) { for (int i = 0; i < srcList.size(); i++) { BaseCfg baseCfg = new BaseCfg(); BeanUtils.copyProperties(srcList.get(i), baseCfg);//拷贝公共属性 // 一条业务配置创建一个分组 com.nis.domain.maat.MaatCfg.DigestCfg cfg = new com.nis.domain.maat.MaatCfg.DigestCfg(); BeanUtils.copyProperties(srcList.get(i), cfg); GroupCfg group = new GroupCfg(); group.setGroupId(baseCfg.getGroupId()); group.setCompileId(baseCfg.getCompileId()); group.setAuditTime(baseCfg.getAuditTime()); group.setIsValid(baseCfg.getIsValid()); groupRelationList.add(group); cfg.setGroupId(group.getGroupId()); cfg.setRegionId(baseCfg.getRegionId()); cfg.setAuditTime(baseCfg.getAuditTime()); cfg.setIsValid(baseCfg.getIsValid()); dstList.add(cfg); } } else { dstList.addAll(srcList); } map.put("groupList", groupRelationList); map.put("dstList", dstList); return map; } /** * 关键字特殊字符转义处理 * @param cfgKeywords * @return */ public static String keywordsEscape(String cfgKeywords) { if (StringUtils.isNotEmpty(cfgKeywords)) { // 不转译特殊字符 cfgKeywords = cfgKeywords.trim();// 首先去掉首尾空格 cfgKeywords = StringEscapeUtils.unescapeHtml4(cfgKeywords); cfgKeywords = cfgKeywords.replace("\\", "\\\\"); cfgKeywords = cfgKeywords.replace("&", "\\&"); cfgKeywords = cfgKeywords.replace(" ", "\\b"); // ***and***在界面表示多个关键字的与表达式,此特殊字符串在common.js中使用定义,maat端以&表示 cfgKeywords = cfgKeywords.replace(Constants.KEYWORD_EXPR, "&"); } return cfgKeywords; } /** * 界面IP配置转换为MAAT类或者回调类IP配置 * * @param dstIp * @param srcIp * @return */ public static List ipConvert(IpCfg dstIp, BaseIpCfg srcIp) { List ipConvertList = Lists.newArrayList(); boolean isRange = (((srcIp.getSrcIpPattern() != null && srcIp.getSrcIpPattern() == 2)||(srcIp.getDestIpPattern()) != null && srcIp.getDestIpPattern() == 2) || (srcIp.getSrcIpAddress() != null && srcIp.getSrcIpAddress().indexOf("-") > -1) || (srcIp.getDestIpAddress() != null && srcIp.getDestIpAddress().indexOf("-") > -1)); if (isRange) { List tempList = Lists.newArrayList(); List tempList1 = Lists.newArrayList(); if (srcIp.getIpType().intValue() == 4) { if (srcIp.getSrcIpAddress() != null) { String startIpPart = srcIp.getSrcIpAddress().split("-")[0]; String endIpPart = srcIp.getSrcIpAddress().split("-")[1]; Integer startNum = Integer.parseInt(startIpPart.split("\\.")[3]); Integer endNum = Integer.parseInt(endIpPart.split("\\.")[3]); for (int i = startNum; i <= endNum; i++) { IpCfg tempIp = new IpCfg(); BeanUtils.copyProperties(dstIp, tempIp); tempIp.setSrcIp(startIpPart.substring(0, startIpPart.lastIndexOf(".") + 1) + i); tempIp.setSrcIpMask("255.255.255.255"); tempList.add(tempIp); } } else { dstIp.setSrcIp("0.0.0.0"); dstIp.setSrcIpMask("255.255.255.255"); tempList.add(dstIp); } if (srcIp.getDestIpAddress() != null) { String startIpPart = srcIp.getDestIpAddress().split("-")[0]; String endIpPart = srcIp.getDestIpAddress().split("-")[1]; Integer startNum = Integer.parseInt(startIpPart.split("\\.")[3]); Integer endNum = Integer.parseInt(endIpPart.split("\\.")[3]); for (IpCfg _cfg : tempList) { for (int i = startNum; i <= endNum; i++) { IpCfg tempIp = new IpCfg(); BeanUtils.copyProperties(_cfg, tempIp); tempIp.setDstIp(startIpPart.substring(0, startIpPart.lastIndexOf(".") + 1) + i); tempIp.setDstIpMask("255.255.255.255"); // 处理 convertPortValues(tempIp, srcIp); if (!tempIp.getSrcIp().equals(tempIp.getDstIp())) { tempList1.add(tempIp); } } } tempList.clear(); } else { for (IpCfg _cfg : tempList) { _cfg.setDstIp("0.0.0.0"); _cfg.setSrcIpMask("255.255.255.255"); convertPortValues(_cfg, srcIp); } } if (tempList1.size() > 0) { ipConvertList.addAll(tempList1); } else { ipConvertList.addAll(tempList); } } else if (srcIp.getIpType().intValue() == 6) { if (srcIp.getSrcIpAddress() != null) { IPv6Address address1 = IPv6Address.fromString(srcIp.getSrcIpAddress().split("-")[0]); IPv6Address address2 = IPv6Address.fromString(srcIp.getSrcIpAddress().split("-")[1]); IPv6Network network = IPv6Network.fromTwoAddresses(address1, address2); dstIp.setSrcIp(address1.toString()); dstIp.setSrcIpMask(network.getNetmask().asAddress().toString()); } else { dstIp.setSrcIp("::"); dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); } if (srcIp.getDestIpAddress() != null) { IPv6Address address1 = IPv6Address.fromString(srcIp.getDestIpAddress().split("-")[0]); IPv6Address address2 = IPv6Address.fromString(srcIp.getDestIpAddress().split("-")[1]); IPv6Network network = IPv6Network.fromTwoAddresses(address1, address2); dstIp.setDstIp(address1.toString()); dstIp.setDstIpMask(network.getNetmask().asAddress().toString()); } else { dstIp.setDstIp("::"); dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); } ipConvertList.add(dstIp); } else { throw new RuntimeException("Unsupported IP type " + srcIp.getIpType()); } } else { if (srcIp.getSrcIpAddress() != null) { if (srcIp.getSrcIpAddress().indexOf("/") != -1) { if (srcIp.getIpType() == 4 /* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4,目的ip为ipv6 Integer srcMaskNum = Integer.parseInt(srcIp.getSrcIpAddress().split("/")[1]); if (srcMaskNum == 0) { dstIp.setSrcIpMask("0.0.0.0"); } else { dstIp.setSrcIpMask(IpUtil.convertMask(srcMaskNum)); } dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]); } else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6,目的ip为ipv4 IPv6Network strangeNetwork = IPv6Network.fromString(srcIp.getSrcIpAddress()); dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]); dstIp.setSrcIpMask(strangeNetwork.getNetmask().asAddress().toString()); } /* * else { Pattern * patternV4Subnet=Pattern.compile(Constants.IPV4_IP_SUBNET_REGEXP); Pattern * patternV6Subnet=Pattern.compile(Constants.IPV6_IP_SUBNET_REGEXP); Matcher * matchernV4Subnet=patternV4Subnet.matcher(srcIp.getSrcIpAddress()); Matcher * matcherV6Subnet=patternV6Subnet.matcher(srcIp.getSrcIpAddress()); * if(matchernV4Subnet.matches()) { Integer srcMaskNum = * Integer.parseInt(srcIp.getSrcIpAddress().split("/")[1]); if(srcMaskNum==0){ * dstIp.setSrcIpMask("0.0.0.0"); }else{ * dstIp.setSrcIpMask(IpUtil.convertMask(srcMaskNum)); } * dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]); }else * if(matcherV6Subnet.matches()){ IPv6Network strangeNetwork = * IPv6Network.fromString(srcIp.getSrcIpAddress()); * dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]); * dstIp.setSrcIpMask(strangeNetwork.getNetmask().asAddress().toString()); }else * { throw new RuntimeException("Invalid IP/subnet mask format"); } } */ else { throw new RuntimeException("Unsupported IP type " + srcIp.getIpType()); } } else { if (srcIp.getIpType() == 4/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4,目的ip为ipv6 dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("255.255.255.255"); } else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6,目的ip为ipv4 dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); } /* * else {//all Pattern patternV4=Pattern.compile(Constants.IPV4_IP_REGEXP); * Pattern patternV6=Pattern.compile(Constants.IPV6_IP_REGEXP); Matcher * matcherV4=patternV4.matcher(srcIp.getSrcIpAddress()); Matcher * matcherV6=patternV6.matcher(srcIp.getSrcIpAddress()); if(matcherV4.matches()) * { dstIp.setSrcIp(srcIp.getSrcIpAddress()); * dstIp.setSrcIpMask("255.255.255.255"); }else if(matcherV6.matches()) { * dstIp.setSrcIp(srcIp.getSrcIpAddress()); * dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); }else { throw * new RuntimeException("Invalid IP format"); } } */ else { throw new RuntimeException("Unsupported IP type " + srcIp.getIpType()); } } } else { if (srcIp.getIpType() == 4/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4,目的ip为ipv6 dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("255.255.255.255"); } else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6,目的ip为ipv4 dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); } /* * else {//all dstIp.setSrcIp(srcIp.getSrcIpAddress()); * dstIp.setSrcIpMask("255.255.255.255"); } */ else { throw new RuntimeException("Unsupported IP type " + srcIp.getIpType()); } } if (srcIp.getDestIpAddress() != null) { if (srcIp.getDestIpAddress().indexOf("/") != -1) { if (srcIp.getIpType() == 4/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6,目的ip为ipv4 Integer dstMaskNum = Integer.parseInt(srcIp.getDestIpAddress().split("/")[1]); if (dstMaskNum == 0) { dstIp.setDstIpMask("0.0.0.0"); } else { dstIp.setDstIpMask(IpUtil.convertMask(dstMaskNum)); ; } dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]); } else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4,目的ip为ipv6 IPv6Network strangeNetwork = IPv6Network.fromString(srcIp.getDestIpAddress()); dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]); dstIp.setDstIpMask(strangeNetwork.getNetmask().asAddress().toString()); } /* * else { Pattern * patternV4Subnet=Pattern.compile(Constants.IPV4_IP_SUBNET_REGEXP); Pattern * patternV6Subnet=Pattern.compile(Constants.IPV6_IP_SUBNET_REGEXP); Matcher * matchernV4Subnet=patternV4Subnet.matcher(srcIp.getDestIpAddress()); Matcher * matcherV6Subnet=patternV6Subnet.matcher(srcIp.getDestIpAddress()); * if(matchernV4Subnet.matches()) { Integer dstMaskNum = * Integer.parseInt(srcIp.getDestIpAddress().split("/")[1]); if(dstMaskNum==0){ * dstIp.setDstIpMask("0.0.0.0"); }else{ * dstIp.setDstIpMask(IpUtil.convertMask(dstMaskNum));; } * dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]); }else * if(matcherV6Subnet.matches()){ IPv6Network strangeNetwork = * IPv6Network.fromString(srcIp.getDestIpAddress()); * dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]); * dstIp.setDstIpMask(strangeNetwork.getNetmask().asAddress().toString()); }else * { throw new RuntimeException("Invalid IP/subnet mask format"); } } */ else { throw new RuntimeException("Unsupported IP type " + srcIp.getIpType()); } } else { if (srcIp.getIpType() == 4/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6,目的ip为ipv4 dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("255.255.255.255"); } else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4,目的ip为ipv6 dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); } /* * else {//all Pattern patternV4=Pattern.compile(Constants.IPV4_IP_REGEXP); * Pattern patternV6=Pattern.compile(Constants.IPV6_IP_REGEXP); Matcher * matcherV4=patternV4.matcher(srcIp.getDestIpAddress()); Matcher * matcherV6=patternV6.matcher(srcIp.getDestIpAddress()); * if(matcherV4.matches()) { dstIp.setDstIp(srcIp.getDestIpAddress()); * dstIp.setDstIpMask("255.255.255.255"); }else if(matcherV6.matches()) { * dstIp.setDstIp(srcIp.getDestIpAddress()); * dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); }else { throw * new RuntimeException("invalid ip format"); } } */ else { throw new RuntimeException("Unsupported IP type " + srcIp.getIpType()); } } } else { if (srcIp.getIpType() == 4/* || srcIp.getIpType()==64 */) {// 64表示源ip为ipv6,目的ip为ipv4 dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("255.255.255.255"); } else if (srcIp.getIpType() == 6/* || srcIp.getIpType()==46 */) {// 46表示源ip为ipv4,目的ip为ipv6 dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"); } /* * else {//all dstIp.setDstIp(srcIp.getDestIpAddress()); * dstIp.setDstIpMask("255.255.255.255"); } */ else { throw new RuntimeException("Unsupported IP type " + srcIp.getIpType()); } } if (srcIp.getSrcPort() != null) { if (srcIp.getSrcPort().indexOf("/") != -1) { String srcMaskNum = srcIp.getSrcPort().split("/")[1]; dstIp.setSrcPortMask(srcMaskNum); dstIp.setSrcPort(srcIp.getSrcPort().split("/")[0]); } else { dstIp.setSrcPort(srcIp.getSrcPort()); dstIp.setSrcPortMask("65535"); } } else { dstIp.setSrcPort("0"); dstIp.setSrcPortMask("65535"); } if (srcIp.getDestPort() != null) { if (srcIp.getDestPort().indexOf("/") != -1) { String dstMaskNum = srcIp.getDestPort().split("/")[1]; dstIp.setDstPortMask(dstMaskNum); dstIp.setDstPort(srcIp.getDestPort().split("/")[0]); } else { dstIp.setDstPort(srcIp.getDestPort()); dstIp.setDstPortMask("65535"); } } else { dstIp.setDstPort("0"); dstIp.setDstPortMask("65535"); } ipConvertList.add(dstIp); } return ipConvertList; } /** * 设置端口值 * * @param dstIp * @param srcIp */ public static void convertPortValues(IpCfg dstIp, BaseIpCfg srcIp) { if (srcIp.getSrcPort() != null) { if (srcIp.getSrcPort().indexOf("/") != -1) { String srcMaskNum = srcIp.getSrcPort().split("/")[1]; dstIp.setSrcPortMask(srcMaskNum); dstIp.setSrcPort(srcIp.getSrcPort().split("/")[0]); } else { dstIp.setSrcPort(srcIp.getSrcPort()); dstIp.setSrcPortMask("65535"); } } else { dstIp.setSrcPort("0"); dstIp.setSrcPortMask("65535"); } if (srcIp.getDestPort() != null) { if (srcIp.getDestPort().indexOf("/") != -1) { String dstMaskNum = srcIp.getDestPort().split("/")[1]; dstIp.setDstPortMask(dstMaskNum); dstIp.setDstPort(srcIp.getDestPort().split("/")[0]); } else { dstIp.setDstPort(srcIp.getDestPort()); dstIp.setDstPortMask("65535"); } } else { dstIp.setDstPort("0"); dstIp.setDstPortMask("65535"); } } }