From 18678f14b5e781291180ededc9ac0c649246bbd6 Mon Sep 17 00:00:00 2001 From: wangxin Date: Fri, 17 Aug 2018 14:19:41 +0800 Subject: [PATCH] =?UTF-8?q?Maat=20=E4=B8=8B=E5=8F=91IP=20all=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nis/web/service/BaseService.java | 114 +++++++++++++++++- 1 file changed, 113 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/nis/web/service/BaseService.java b/src/main/java/com/nis/web/service/BaseService.java index 1a324ef20..4df642004 100644 --- a/src/main/java/com/nis/web/service/BaseService.java +++ b/src/main/java/com/nis/web/service/BaseService.java @@ -7,6 +7,10 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.management.RuntimeErrorException; import org.apache.commons.lang3.StringEscapeUtils; import org.slf4j.Logger; @@ -388,7 +392,7 @@ public abstract class BaseService { * @return */ public static IpCfg ipConvert(IpCfg dstIp,BaseIpCfg srcIp){ - if(srcIp.getSrcIpAddress()!=null){ + 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]); @@ -403,6 +407,26 @@ public abstract class BaseService { 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 if(srcIp.getSrcIpAddress().indexOf("-")!=-1){ @@ -415,6 +439,23 @@ public abstract class BaseService { IPv6Network network = IPv6Network.fromTwoAddresses(address1,address2); dstIp.setSrcIp(address1.toString()); dstIp.setSrcIpMask(network.getNetmask().asAddress().toString()); + }else { + Pattern patternV4Range=Pattern.compile(Constants.IPV4_IP_RANGE_REGEXP); + Pattern patternV6Range=Pattern.compile(Constants.IPV6_IP_RANGE_REGEXP); + Matcher matcherV4Range=patternV4Range.matcher(srcIp.getSrcIpAddress()); + Matcher matcherV6Range=patternV6Range.matcher(srcIp.getSrcIpAddress()); + if(matcherV4Range.matches()) { + dstIp.setSrcIp(srcIp.getSrcIpAddress().split("-")[0]); + dstIp.setSrcIpMask(IpUtil.getMask(srcIp.getSrcIpAddress().split("-")[0], srcIp.getSrcIpAddress().split("-")[1])); + }else if(matcherV6Range.matches()) { + 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 { + throw new RuntimeException("Invalid IP range format"); + } } }else{ @@ -424,6 +465,20 @@ public abstract class BaseService { }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"); + } } } @@ -434,6 +489,9 @@ public abstract class BaseService { }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"); } } if(srcIp.getDestIpAddress()!=null){ @@ -450,6 +508,26 @@ public abstract class BaseService { 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 if(srcIp.getDestIpAddress().indexOf("-")!=-1){ @@ -462,6 +540,23 @@ public abstract class BaseService { IPv6Network network = IPv6Network.fromTwoAddresses(address1,address2); dstIp.setDstIp(address1.toString()); dstIp.setDstIpMask(network.getNetmask().asAddress().toString()); + }else { + Pattern patternV4Range=Pattern.compile(Constants.IPV4_IP_RANGE_REGEXP); + Pattern patternV6Range=Pattern.compile(Constants.IPV6_IP_RANGE_REGEXP); + Matcher matcherV4Range=patternV4Range.matcher(srcIp.getDestIpAddress()); + Matcher matcherV6Range=patternV6Range.matcher(srcIp.getDestIpAddress()); + if(matcherV4Range.matches()) { + dstIp.setDstIp(srcIp.getDestIpAddress().split("-")[0]); + dstIp.setDstIpMask(IpUtil.getMask(srcIp.getDestIpAddress().split("-")[0], srcIp.getDestIpAddress().split("-")[1])); + }else if(matcherV6Range.matches()) { + 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 { + throw new RuntimeException("Invalid IP range format"); + } } }else{ @@ -471,6 +566,20 @@ public abstract class BaseService { }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"); + } } } @@ -481,6 +590,9 @@ public abstract class BaseService { }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"); } } if(srcIp.getSrcPort()!=null){