在Java中将CIDR表示法转换为IP范围

6
我该如何在Java中将CIDR转换为IP范围?我已经使用了Apache SubnetUtils,但它忽略了范围的第一个和最后一个值。
例如,对于CIDR 192.168.1.0/16,输出应该是192.168.0.0到192.168.255.255。但是我得到的是192.168.0.1到192.168.255.254。
请帮忙解决。

2
请问您能否展示一下您的代码,这样我们才能帮助您。 - Jens
这更像是一个网络问题而不是编程问题,请看下面我的回答! - Am_I_Helpful
2个回答

17

SubnetUtils类默认情况下在可用“主机”地址范围中排除零号和最后一个地址,因为它们(或者在零号地址的情况下)被用作网络广播地址。

您需要调用.setInclusiveHostCount(true)方法来告诉SubnetUtils实例在返回的范围内包括这些地址。


感谢您提供如此详细的答案,让我受益匪浅! - Am_I_Helpful
@Rehman 请点赞并接受。 - Alnitak
@Alnitak - 我已经接受了,但是不能点赞...因为需要15个声望 :) ...而我没有。 - Rahman

1
实际上,由于其具有的特殊性质,第一个和最后一个值将被忽略。这些不是通用IP地址。 类C IP地址范围将是这样。您需要阅读更多关于“类C类型IP地址中的子网划分和寻址”的内容。 192.168.0.0 --->按照惯例,网络路由器和其他网关使用192.168.0.0来泛指私有网络!由于是私有的,因此192.168.0.0及其网络内的所有其他地址都不能在Internet上使用。它不像普通的IP地址。它是主机的IP地址(默认情况下),无法更改! 192.168.255.255 --->网络广播地址,同样不是通用IP地址,因为它用于将数据广播到网络上的所有其他计算机!

192.168.0.0 不是“本地地址”,而是另一个保留地址,出于历史原因(曾经用于广播)。 - user207421
@EJP-基本上,这是系统在未连接到网络时使用的地址! - Am_I_Helpful
1
@shekharsuman:“当它未连接到网络时”-需要引用。此外,“类别地址分配”已经过时约二十年。 - Alnitak
抱歉先生,但至少它属于C类——尽管它已经过时,但不能否认它属于C类。此外,我已根据您的要求编辑了我的答案,当时我错误地提到了“0.0.0.0”而不是“192.168.0.0”。感谢您指出这个答案,谢谢。另外,请在需要进行更改时发表评论! - Am_I_Helpful
另外,我看到您的个人简介非常“高端”,真的非常感谢您的指出。还需要做出更多的改变吗,先生? - Am_I_Helpful
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接