2

给定这样的网络定义,在这种情况下192.168.1.0/24,我想将/24CIDR 转换为四位网络掩码255.255.255.0

不应使用额外的宝石。

4

2 回答 2

2

这里的实际方法非常简单:

def mask(n)
  [ ((1 << 32) - 1) << (32 - n) ].pack('N').bytes.join('.')
end

哪里可以给你这样的结果:

mask(24)
# => "255.255.255.0"
mask(16)
# => "255.255.0.0"
mask(22)
# => "255.255.252.0"
于 2021-03-03T14:44:14.943 回答
0

RubyIPAddr似乎没有公开此功能。但是,它包含一个名为的私有实例变量@mask_addr,其中包含所需掩码的整数值。

IPAddr它可以通过将其转换回另一个实例来表示为一个四位数的子掩码:

require "ipaddr"

net = IPAddr.new("192.168.1.0/24")
subnet = IPAddr.new(net.instance_variable_get(:@mask_addr), Socket::AF_INET).to_s
# => "255.255.255.0"
于 2021-03-03T14:38:25.823 回答