Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 拆分网络块_Java_Networking_Ip - Fatal编程技术网

Java 拆分网络块

Java 拆分网络块,java,networking,ip,Java,Networking,Ip,如何在Java中将网络块拆分为子块。我想从给定的67.10/16块中找出可以生成哪些/18块。例如,输出应如下所示 67.10.0/18 67.10.64/18 67.10.128/18 67.10.192/18 或者,如果我输入67.10/16,目标cidr为/17,则输出应为 67.10.0/17 67.10.128/17 做这件事的最好和有效的方法是什么。 谢谢例如,将子网67.10.1.1/16分成四个块。 一般而言: 将基本IP地址转换为数字 01000011 0000101000

如何在Java中将网络块拆分为子块。我想从给定的67.10/16块中找出可以生成哪些/18块。例如,输出应如下所示

67.10.0/18
67.10.64/18
67.10.128/18
67.10.192/18
或者,如果我输入67.10/16,目标cidr为/17,则输出应为

67.10.0/17
67.10.128/17
做这件事的最好和有效的方法是什么。
谢谢

例如,将子网67.10.1.1/16分成四个块。 一般而言:

将基本IP地址转换为数字

01000011 00001010000001(1124729089)

将基本掩码转换为数字

111111111110000000000000000(4294901760)

使用提供真实基本IP的掩码屏蔽基本IP

01000011 00001000000000(1124728832)

将新掩码(/18)转换为数字

11111111111111 11000000000000000(4294950912)

对原始掩码和新掩码进行异或运算,以获得加法因子

00000000000000 1100000000000(49152)

真正的基本IP开始

for x = 0 to (2^(new cidr-old cidr))-1
 use **true base IP**
 true base IP = true base IP + addition factor
next x

或者更好的是,是否有任何java API可用于管理IP地址。谢谢您的概述。抱歉,我对位运算符不太在行。你介意告诉我如何使用XOR吗?还有,既然我们有二进制值,我该如何做加法。再次感谢。我不是一个java人,但是一旦IP地址和掩码被转换成数字,应该很容易。我知道java有一个XOR。不用担心,让我问你这个。在您提到的循环中,我没有看到“真正的基本IP”发生变化。据我所知,如果/16中出现/18,这将循环两次。一个17岁,另一个18岁。我是否需要再次执行整个例程,即在每次迭代时制作掩码并获得真实IP?(2^(18-16))-1=3。0到3=4。每个循环将增加110000000000(49152)。