我需要将通配符子网转换为最小的 cidr 子网列表。例如:
1.2.3.4/255.0.255.0
converted to
1.0.3.0/24
1.1.3.0/24
1.2.3.0/24
1.3.3.0/24
...
1.254.3.0/24
1.255.3.0/24
上面的例子很简单,但对于像 1.2.3.4/252.0.128.0 这样的通配符子网,它更复杂。
Java中是否有一个库。
提前致谢。
您可以SubnetUtils
从Apache使用
它有一个构造函数SubnetUtils(String address, String mask)
,将 2 个字符串、目标 IP 和网络掩码作为参数。
然后你可以使用嵌套类SubnetUtilsInfo
和它的方法来得到你想要的。
TCP/IP 中使用了 3 种类型的掩码。子网掩码、简单位掩码和通配符掩码。子网掩码必须是连续的。意思是一系列 1,后面是一系列 0。自 1991 年以来一直如此(RFC 1219)。使用此掩码是为了让设备了解相关子网的网络号、广播号和有效主机。简单的位掩码用于访问控制并允许不连续。Cisco ASA 防火墙、iptables 和其他系统使用这些类型的掩码来测试 IP 地址的某些部分。例如 10.1.0.254 255.255.0.255 正在测试第一个八位字节为 10,第二个八位字节为 1,第四个八位字节为 254,但第三个八位字节的值可以是 0-255。通配符掩码是一种反转的简单位掩码,通常用于 Cisco 路由器和交换机。这些也允许是不连续的。使用与之前相同的示例,我们将反转掩码以获得 10.1.0.254 0.0.255.0 的测试。此测试与前面的示例相同,因为我们关心八位字节 1,2 和 4 是否匹配精确值,但八位字节 3 可能会有所不同。所有这一切的关键点是您正在尝试转换两种不同的东西。子网掩码的使用与简单的位掩码/通配符掩码不同。从一个转换到另一个是不可能的。即使简单/通配符掩码是连续的,该掩码也可能不代表正在使用的实际子网掩码。所有这一切的关键点是您正在尝试转换两种不同的东西。子网掩码的使用与简单的位掩码/通配符掩码不同。从一个转换到另一个是不可能的。即使简单/通配符掩码是连续的,该掩码也可能不代表正在使用的实际子网掩码。所有这一切的关键点是您正在尝试转换两种不同的东西。子网掩码的使用与简单的位掩码/通配符掩码不同。从一个转换到另一个是不可能的。即使简单/通配符掩码是连续的,该掩码也可能不代表正在使用的实际子网掩码。