Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证Java中的CIDR重叠_Java_Validation_Cidr - Fatal编程技术网

验证Java中的CIDR重叠

验证Java中的CIDR重叠,java,validation,cidr,Java,Validation,Cidr,有两个CIDR块-如何在Java中验证它们是否重叠?我想出了以下解决方案,但我不确定: 它是完整的 它可以在没有外部库依赖的情况下完成 这可以通过更优雅/高效的方式完成 下面的代码使用 void isSubnetOverlap(字符串cidr1、字符串cidr2){ SubnetUtils.SubnetInfo subnetCidr=新的SubnetUtils(cidr1).getInfo(); SubnetUtils.SubnetInfo clusterCidr=新的SubnetUtils

有两个CIDR块-如何在Java中验证它们是否重叠?我想出了以下解决方案,但我不确定:

  • 它是完整的
  • 它可以在没有外部库依赖的情况下完成
  • 这可以通过更优雅/高效的方式完成
下面的代码使用

void isSubnetOverlap(字符串cidr1、字符串cidr2){
SubnetUtils.SubnetInfo subnetCidr=新的SubnetUtils(cidr1).getInfo();
SubnetUtils.SubnetInfo clusterCidr=新的SubnetUtils(cidr2).getInfo();
if(subnetCidr.isInRange(clusterCidr.getLowAddress())
||subnetCidr.isInRange(clusterCidr.getHighAddress())
||clusterCidr.isInRange(subnetCidr.getLowAddress())
||clusterCidr.isInRange(subnetCidr.getHighAddress()){
//例如抛出一些异常
}
}

您的解决方案有效;您不需要检查高位地址。我不建议为一些已经有效的东西编写您自己的解决方案,但是检查一个网络作为另一个网络的子网并不困难

只需使用较大网络的网络掩码,查看较小网络是否是较大网络的子集

下面是java中的一个示例

String[]c1=s1.拆分(“/”);
字符串[]c2=s2。拆分(“/”;
如果(c1.length!=2 | | c2.length!=2){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
字符串[]a1=c1[0]。拆分(“\\”);
字符串[]a2=c2[0]。拆分(“\\”);
如果(a1.长度!=4 | | a2.长度!=4){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
int m1,m2;
试一试{
m1=整数.parseInt(c1[1],10);
m2=整数.parseInt(c2[1],10);
}捕获(数字格式){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
如果((m1<0)| |(m1>32)| |(m2<0)| |(m2>32)){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
inti1=0,i2=0;
对于(int i=0;i<4;i++){
试一试{
int x1=整数.parseInt(a1[i],10);
intx2=Integer.parseInt(a2[i],10);
如果((x1<0)| |(x1>255)| |(x2<0)| |(x2>255)){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}

i1=i1 |(x1您的解决方案有效;您不需要检查高地址。我不建议为已经有效的内容编写您自己的解决方案,但将一个网络检查为另一个网络的子网并不困难

只需使用较大网络的网络掩码,查看较小网络是否是较大网络的子集

下面是java中的一个示例

String[]c1=s1.拆分(“/”);
字符串[]c2=s2。拆分(“/”;
如果(c1.length!=2 | | c2.length!=2){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
字符串[]a1=c1[0]。拆分(“\\”);
字符串[]a2=c2[0]。拆分(“\\”);
如果(a1.长度!=4 | | a2.长度!=4){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
int m1,m2;
试一试{
m1=整数.parseInt(c1[1],10);
m2=整数.parseInt(c2[1],10);
}捕获(数字格式){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
如果((m1<0)| |(m1>32)| |(m2<0)| |(m2>32)){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}
inti1=0,i2=0;
对于(int i=0;i<4;i++){
试一试{
int x1=整数.parseInt(a1[i],10);
intx2=Integer.parseInt(a2[i],10);
如果((x1<0)| |(x1>255)| |(x2<0)| |(x2>255)){
抛出新异常(“格式错误的cidr地址”+”+“(s1=“+s1
+“,“+”s2=“+s2+”);
}

i1=i1|(x1)您试图避免使用外部库有什么原因吗?为什么担心效率?减少依赖关系是公司的事情-每个未经批准的开源库都必须经历一个痛苦的过程。您试图避免使用外部库有什么原因吗?为什么担心效率?减少依赖关系是公司的事情所有未经批准的开源库都必须经历一个痛苦的过程。