使用 java 遍历 CIDR 中的所有 IP 地址
Iterating through all IP addresses in a CIDR using java
想知道有没有什么办法可以爆出CIDR格式的IP。除了展开此代码外,还应注意考虑 'exclude' 功能。
准确地说,我想要一些类似 172.21.3.128/30(Inclusion list:172.21.3.128/30) 和 returns
的东西
- 172.21.3.128
- 172.21.3.129
- 172.21.3.130
- 172.21.3.131
如果它的排除列表为“172.21.3.130”(包含 list:172.21.3.128/30 & 排除 list:172.21.3.130)那么它应该 return
- 172.21.3.128
- 172.21.3.129
- 172.21.3.131
目前,我展开包含列表并保留在设置中,展开排除列表并保留在set.And 与此方法之间的区别 two.Problem 是我必须将所有展开的 IP 保留在内存中,这可能如果范围很大,就会产生问题(内存不足错误)。
关于包含列表,您可以使用 Apache Commons Net 的 SubnetUtils class 来获取所有地址,例如:
String subnet = "192.168.0.0/24";
SubnetUtils utils = new SubnetUtils(subnet);
String[] addresses = utils.getInfo().getAllAddresses();
但在这种情况下,您似乎需要自己进行排除,因为这种实用程序本身不支持它。因此,您可以简单地创建所有地址的集合并从中删除所有应该排除的地址。
想知道有没有什么办法可以爆出CIDR格式的IP。除了展开此代码外,还应注意考虑 'exclude' 功能。
准确地说,我想要一些类似 172.21.3.128/30(Inclusion list:172.21.3.128/30) 和 returns
的东西- 172.21.3.128
- 172.21.3.129
- 172.21.3.130
- 172.21.3.131
如果它的排除列表为“172.21.3.130”(包含 list:172.21.3.128/30 & 排除 list:172.21.3.130)那么它应该 return
- 172.21.3.128
- 172.21.3.129
- 172.21.3.131
目前,我展开包含列表并保留在设置中,展开排除列表并保留在set.And 与此方法之间的区别 two.Problem 是我必须将所有展开的 IP 保留在内存中,这可能如果范围很大,就会产生问题(内存不足错误)。
关于包含列表,您可以使用 Apache Commons Net 的 SubnetUtils class 来获取所有地址,例如:
String subnet = "192.168.0.0/24";
SubnetUtils utils = new SubnetUtils(subnet);
String[] addresses = utils.getInfo().getAllAddresses();
但在这种情况下,您似乎需要自己进行排除,因为这种实用程序本身不支持它。因此,您可以简单地创建所有地址的集合并从中删除所有应该排除的地址。