diff --git a/.classpath b/.classpath index 43796329a..8f5d0c05f 100644 --- a/.classpath +++ b/.classpath @@ -153,5 +153,10 @@ + + + + + diff --git a/lib/java-ipv6-0.16.jar b/lib/java-ipv6-0.16.jar new file mode 100644 index 000000000..8666e5cd5 Binary files /dev/null and b/lib/java-ipv6-0.16.jar differ diff --git a/src/main/java/com/nis/web/service/BaseService.java b/src/main/java/com/nis/web/service/BaseService.java index 3934ef7bb..74ca68700 100644 --- a/src/main/java/com/nis/web/service/BaseService.java +++ b/src/main/java/com/nis/web/service/BaseService.java @@ -19,6 +19,9 @@ import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; +import com.googlecode.ipv6.IPv6Address; +import com.googlecode.ipv6.IPv6AddressRange; +import com.googlecode.ipv6.IPv6Network; import com.nis.domain.SysRole; import com.nis.domain.SysUser; import com.nis.domain.configuration.BaseCfg; @@ -344,74 +347,86 @@ public abstract class BaseService { public static IpCfg ipConvert(IpCfg dstIp,BaseIpCfg srcIp){ if(srcIp.getSrcIpAddress()!=null){ if(srcIp.getSrcIpAddress().indexOf("/")!=-1){ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4 || srcIp.getIpType()==46){ Integer srcMaskNum = Integer.parseInt(srcIp.getSrcIpAddress().split("/")[1]); dstIp.setSrcIpMask(IpUtil.convertMask(srcMaskNum)); dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]); - }else{ - + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ + IPv6Network strangeNetwork = IPv6Network.fromString(srcIp.getSrcIpAddress()); + dstIp.setSrcIp(srcIp.getSrcIpAddress().split("/")[0]); + dstIp.setSrcIpMask(strangeNetwork.getNetmask().asAddress().toString()); } }else if(srcIp.getSrcIpAddress().indexOf("-")!=-1){ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4|| srcIp.getIpType()==46){ dstIp.setSrcIp(srcIp.getSrcIpAddress().split("-")[0]); dstIp.setSrcIpMask(IpUtil.getMask(srcIp.getSrcIpAddress().split("-")[0], srcIp.getSrcIpAddress().split("-")[1])); - }else{ - + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ + 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{ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4|| srcIp.getIpType()==46){ dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("0.0.0.0"); - }else{ + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("::"); } } }else{ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4|| srcIp.getIpType()==46){ dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("0.0.0.0"); - }else{ + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ dstIp.setSrcIp(srcIp.getSrcIpAddress()); dstIp.setSrcIpMask("::"); } } if(srcIp.getDestIpAddress()!=null){ if(srcIp.getDestIpAddress().indexOf("/")!=-1){ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4|| srcIp.getIpType()==46){ Integer dstMaskNum = Integer.parseInt(srcIp.getDestIpAddress().split("/")[1]); dstIp.setDstIpMask(IpUtil.convertMask(dstMaskNum)); dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]); - }else{ - + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ + IPv6Network strangeNetwork = IPv6Network.fromString(srcIp.getDestIpAddress()); + dstIp.setDstIp(srcIp.getDestIpAddress().split("/")[0]); + dstIp.setDstIpMask(strangeNetwork.getNetmask().asAddress().toString()); } }else if(srcIp.getDestIpAddress().indexOf("-")!=-1){ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4|| srcIp.getIpType()==46){ dstIp.setDstIp(srcIp.getDestIpAddress().split("-")[0]); dstIp.setDstIpMask(IpUtil.getMask(srcIp.getDestIpAddress().split("-")[0], srcIp.getDestIpAddress().split("-")[1])); - }else{ - + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ + 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{ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4|| srcIp.getIpType()==46){ dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("0.0.0.0"); - }else{ + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("::"); } } }else{ - if(srcIp.getIpType()==4){ + if(srcIp.getIpType()==4|| srcIp.getIpType()==46){ dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("0.0.0.0"); - }else{ + }else if(srcIp.getIpType()==6|| srcIp.getIpType()==64){ dstIp.setDstIp(srcIp.getDestIpAddress()); dstIp.setDstIpMask("::"); }