在 Ruby 中创建 IP 地址范围

Creating IP address range in Ruby

假设我们在文本文件中有一个 IP addresses/blocks 列表:

123.123.0.0
111.111.111.0
101.101.0.111

现在我想打印出所有可能的 IP 地址。例如上面列表中的第一项:

123.123.0.0
123.123.0.1
123.123.0.2
123.123.0.3
[...]
123.123.0.255
123.123.1.1
123.123.1.2
[...]
123.123.255.255

我不需要读写文件等方面的帮助。只是想不出如何打印出 block/range 中每个可能的 IP 地址。是否可以做一个块并让它用 x 替换 0 并保留 |x|,并在 1-255 之间打印 x?

require 'ipaddr'
puts IPAddr.new("123.123.0.0/16").to_range.to_a

如果您绝对必须在问题中使用模棱两可的 "IP defines range" 数据,

require 'ipaddr'
STDIN.read.each_line do |line|
    num_zeroes = line[/(\.0)*$/].length / 2
    ip_range_string = "#{line.chomp}/#{32 - num_zeroes * 8}"
    puts IPAddr.new(ip_range_string).to_range.to_a
end