将通配符子网转换为最小cidr子网列表



我需要将通配符子网转换为最小的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中有这样的库吗。

提前谢谢。

您可以使用Apache中的SubnetUtils

它有一个构造函数SubnetUtils(String address, String mask)将目的地IP和网络掩码作为自变量2字符串。

然后您可以使用嵌套类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.250.0的测试。这个测试与前面的例子相同,因为我们关心与精确值匹配的八位位组1,2和4,但八位位集3可能会变化。所有这一切的关键点是,你试图转换两种不同的东西。子网掩码与简单位掩码/通配符掩码不同。从一个转换到另一个是不可能的。即使简单/通配符掩码是连续的,该掩码也可能不能代表实际使用的子网掩码。

在python 中将通配符转换为前缀

address = Address("1.2.3.4 255.0.255.0")
prefixes = address.prefixes()
print(prefixes)  
# ['0.2.0.4/32', 
#  '0.2.1.4/32', 
#  '0.2.2.4/32', 
#  ...

最新更新