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