Используйте IPAddr из Ruby Stdlib.
IPAddr предоставляет набор методов для управления IP-адресом. Поддерживаются как IPv4, так и IPv6.
require 'ipaddr'
# I used a smaller number to limit the output
ip_range = IPAddr.new("192.168.1.3")..IPAddr.new("192.168.1.13")
ip_range.to_a
Вывод представляет собой массив экземпляров IPAddr.
=> [#<IPAddr: IPv4:192.168.1.3/255.255.255.255>, #<IPAddr: IPv4:192.168.1.4/255.255.255.255>, #<IPAddr: IPv4:192.168.1.5/255.255.255.255>, #<IPAddr: IPv4:192.168.1.6/255.255.255.255>, #<IPAddr: IPv4:192.168.1.7/255.255.255.255>, #<IPAddr: IPv4:192.168.1.8/255.255.255.255>, #<IPAddr: IPv4:192.168.1.9/255.255.255.255>, #<IPAddr: IPv4:192.168.1.10/255.255.255.255>, #<IPAddr: IPv4:192.168.1.11/255.255.255.255>, #<IPAddr: IPv4:192.168.1.12/255.255.255.255>, #<IPAddr: IPv4:192.168.1.13/255.255.255.255>]
Хотя слово предупреждения. Если вы принимаете пользовательский ввод, убедитесь, что вы уловили потенциальный IPAddr::InvalidAddressError
, который может возникнуть.
begin
IPAddr.new(params[:from])..IPAddr.new(params[:to])
rescue IPAddr::InvalidAddressError
# @todo handle error
logger.info("Oh Noes!")
end