在Ruby中创建IP地址范围

use*_*137 1 ruby ip ipv4

假设我们在文本文件中有一个IP地址/块列表:

123.123.0.0
111.111.111.0
101.101.0.111
Run Code Online (Sandbox Code Playgroud)

现在我想打印出所有可能的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
Run Code Online (Sandbox Code Playgroud)

我在阅读和编写文件等方面不需要帮助.只是想不出如何打印出该块/范围内的每个可能的IP地址.有可能做一个块并用x替换0并保持| x |,并在1-255之间打印x?

Ama*_*dan 6

require 'ipaddr'
puts IPAddr.new("123.123.0.0/16").to_range.to_a
Run Code Online (Sandbox Code Playgroud)

如果您必须在问题中使用模糊的"IP定义范围"数据,

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
Run Code Online (Sandbox Code Playgroud)