【问题标题】:Convert wildcard subnet to smallest cidr subnet list将通配符子网转换为最小的 cidr 子网列表
【发布时间】:2012-09-20 13:47:38
【问题描述】:

我需要将通配符子网转换为最小的 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 中是否有相应的库。

提前致谢。

【问题讨论】:

  • 你输入的是字符串还是数字数据类型?
  • 掩码 252.0.128.0 无效。以点十进制格式表示的数字必须由连续的 1 位组成,才能成为有效的网络掩码。
  • 但它可以在 iptables 中使用,所以它是可能的,示例规则:iptables -A INPUT -s 10.0.0.0/252.0.128.0 -j ACCEPT 我需要这种转换才能使用这些子网ipset。所以它实际上是有效的。
  • 我的输入是字符串数据类型。

标签: java wildcard converter subnet cidr


【解决方案1】:

你可以从Apache使用SubnetUtils

它有一个构造函数SubnetUtils(String address, String mask) 将 2 个字符串、目标 IP 和网络掩码作为参数。

然后你可以使用嵌套类SubnetUtilsInfo,它的方法得到你想要的。

【讨论】:

    【解决方案2】:

    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 可能会有所不同。 所有这一切的关键是您正在尝试转换两种不同的东西。子网掩码的使用与简单的位掩码/通配符掩码不同。从一个转换到另一个是不可能的。即使简单/通配符掩码是连续的,掩码也可能不代表实际使用的子网掩码。

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2020-08-05
      • 2013-01-21
      • 2017-10-29
      • 2016-10-31
      相关资源
      最近更新 更多