拆分为源端口Pattern,目的端口Pattern (2)show more修改,并移动刀ipRegion.js中 (3)IP复用未作修改 (4)删除部分废弃的导入模板以及废弃的导入方法
691 lines
28 KiB
Java
691 lines
28 KiB
Java
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<IpPortCfg> ipList,List<BaseStringCfg> strList,List<ComplexkeywordCfg> complexStrList,
|
||
List<com.nis.domain.configuration.NumBoundaryCfg > numList,
|
||
List<FileDigestCfg> fileList,List<Integer> regionIds,List<Integer> groupIds,BaseCfg entity,
|
||
Integer compileId,Date auditTime,List<GroupCfg> groupRelationList,
|
||
List<IpCfg> ipRegionList,
|
||
List<StringCfg> strRegionList,
|
||
List<NumBoundaryCfg> numRegionList,
|
||
List<DigestCfg> digestRegionList,
|
||
List<IpCfg> areaIpRegionList,String userRegion){
|
||
List list1 = new ArrayList();
|
||
List<BaseStringCfg> list2 = new ArrayList();
|
||
List<ComplexkeywordCfg> list3 = new ArrayList();
|
||
List<com.nis.domain.configuration.NumBoundaryCfg> list4 = new ArrayList();
|
||
List<FileDigestCfg> list5 = new ArrayList();
|
||
if(ipList.size()>0){
|
||
for(int index=0;index<ipList.size();index++){
|
||
IpPortCfg ip = ipList.get(index);
|
||
if(ip.getCompileId().equals(compileId)){
|
||
ip.setRegionId(regionIds.get(0));
|
||
regionIds.remove(0);
|
||
ip.setGroupId(groupIds.get(0));
|
||
groupIds.remove(0);
|
||
ip.setIsValid(entity.getIsValid());
|
||
ip.setAuditTime(auditTime);
|
||
list1.add(ip);
|
||
}
|
||
}
|
||
}
|
||
for(int index=0;index<strList.size();index++){
|
||
BaseStringCfg str = strList.get(index);
|
||
if(str.getCompileId().equals(compileId)){
|
||
str.setRegionId(regionIds.get(0));
|
||
regionIds.remove(0);
|
||
str.setGroupId(groupIds.get(0));
|
||
groupIds.remove(0);
|
||
str.setIsValid(entity.getIsValid());
|
||
str.setAuditTime(auditTime);
|
||
list2.add(str);
|
||
if(entity.getServiceId().equals(513)||entity.getServiceId().equals(515)){
|
||
if(userRegion.equals("")){
|
||
userRegion += Constants.USERREGION_DOMAIN_STR+"="+str.getCfgKeywords();
|
||
}else{
|
||
userRegion += Constants.USER_REGION_SPLIT+Constants.USERREGION_DOMAIN_STR+"="+str.getCfgKeywords();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
for(int index=0;index<complexStrList.size();index++){
|
||
ComplexkeywordCfg str = complexStrList.get(index);
|
||
if(str.getCompileId().equals(compileId)){
|
||
str.setRegionId(regionIds.get(0));
|
||
regionIds.remove(0);
|
||
str.setGroupId(groupIds.get(0));
|
||
groupIds.remove(0);
|
||
str.setIsValid(entity.getIsValid());
|
||
str.setAuditTime(auditTime);
|
||
list3.add(str);
|
||
if(entity.getServiceId().equals(129) && str.getDistrict()!=null){//http监测
|
||
String dictValue = DictUtils.getDictCode(Constants.HTTP_HEADER_DICT_MODULE, str.getDistrict());
|
||
if(StringUtil.isEmpty(dictValue) || dictValue.equals("默认")){
|
||
if(userRegion.equals("")){
|
||
userRegion += Constants.HTTP_HEADER_USER_REGION_KEY+"="+str.getDistrict();
|
||
}else{
|
||
userRegion += Constants.USER_REGION_SPLIT+Constants.HTTP_HEADER_USER_REGION_KEY+"="+str.getDistrict();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
for(int index=0;index<numList.size();index++){
|
||
com.nis.domain.configuration.NumBoundaryCfg num = numList.get(index);
|
||
if(num.getCompileId().equals(compileId)){
|
||
num.setRegionId(regionIds.get(0));
|
||
regionIds.remove(0);
|
||
num.setGroupId(groupIds.get(0));
|
||
groupIds.remove(0);
|
||
num.setIsValid(entity.getIsValid());
|
||
num.setAuditTime(auditTime);
|
||
list4.add(num);
|
||
}
|
||
}
|
||
for(int index=0;index<fileList.size();index++){
|
||
FileDigestCfg file = fileList.get(index);
|
||
if(file.getCompileId().equals(compileId)){
|
||
file.setRegionId(regionIds.get(0));
|
||
regionIds.remove(0);
|
||
file.setGroupId(groupIds.get(0));
|
||
groupIds.remove(0);
|
||
file.setIsValid(entity.getIsValid());
|
||
file.setAuditTime(auditTime);
|
||
list5.add(file);
|
||
}
|
||
}
|
||
if(list1.size()>0){
|
||
ipList.removeAll(list1);
|
||
Map<String,List> 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<String,List> map = cfgToMaatConvert(strRegionList,list2,2,groupRelationList);
|
||
groupRelationList=map.get("groupList");
|
||
strRegionList=map.get("dstList");
|
||
}
|
||
if(list3.size()>0){
|
||
complexStrList.removeAll(list3);
|
||
Map<String,List> map = cfgToMaatConvert(strRegionList,list3,3,groupRelationList);
|
||
groupRelationList=map.get("groupList");
|
||
strRegionList=map.get("dstList");
|
||
}
|
||
if(list4.size()>0){
|
||
numList.removeAll(list4);
|
||
Map<String,List> map = cfgToMaatConvert(numRegionList,list4,4,groupRelationList);
|
||
groupRelationList=map.get("groupList");
|
||
numRegionList=map.get("dstList");
|
||
}
|
||
if(list5.size()>0){
|
||
fileList.removeAll(list5);
|
||
Map<String,List> map = cfgToMaatConvert(digestRegionList,list5,5,groupRelationList);
|
||
groupRelationList=map.get("groupList");
|
||
digestRegionList=map.get("dstList");
|
||
}
|
||
return userRegion;
|
||
}
|
||
// asn IP 复用转换
|
||
public static List<IpCfg> groupReuseCfgAddRemoveConvert(List<? extends BaseCfg<?>> ipCfgList, Integer isValid,
|
||
Integer groupId) {
|
||
logger.warn("convert data start");
|
||
long start = System.currentTimeMillis();
|
||
Date opTime = new Date();
|
||
List<IpCfg> 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<IpCfg> 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<IpCfg> 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 <T>
|
||
* @param <T>
|
||
* @param dstList
|
||
* @param srcList
|
||
* @param cfgType,1为IP类型,2为字符串类型,3为增强字符串,4数值类型,5摘要类,6回调类[但字符串类域配置和增强字符串域配置在接口参数中同属于strRegionList]
|
||
* @param baseCfg,配置基本信息
|
||
* @param groupRelationList
|
||
* 配置分组列表
|
||
* @return
|
||
*/
|
||
public static <T> Map<String, List> cfgToMaatConvert(List dstList, List<T> srcList, Integer cfgType,List groupRelationList) {
|
||
Map<String, List> 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<Integer> 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<IpCfg> cfgs = ipConvert(cfg, baseIpCfg);
|
||
if (cfgs.size() > 1) {
|
||
List<Integer> 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<IpCfg> ipConvert(IpCfg dstIp, BaseIpCfg srcIp) {
|
||
List<IpCfg> 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<IpCfg> tempList = Lists.newArrayList();
|
||
List<IpCfg> 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");
|
||
}
|
||
}
|
||
}
|