Ruby:如何将IP范围转换为IP数组

有没有简单的方法将IP范围转换为IP数组?

def convertIPrange (start_ip, end_ip) #output: array of ips end end 

例如输入

 ('192.168.1.105', '192.168.1.108') 

产量

 ['192.168.1.105','192.158.1.106','192.158.1.107','192.158.1.108'] 

使用Ruby标准库IPAddr

 # I would suggest naming your function using underscore rather than camelcase # because of Ruby naming conventions # require 'ipaddr' def convert_ip_range(start_ip, end_ip) start_ip = IPAddr.new(start_ip) end_ip = IPAddr.new(end_ip) # map to_s if you like, you can also call to_a, # IPAddrs have some neat functions regarding IPs, # be sure to check them out # (start_ip..end_ip).map(&:to_s) end 
 def convertIPrange first, last first, last = [first, last] .map{|s| s.split(".").inject(0){|i, s| i = 256 * i + s.to_i}} (first..last).map do |q| a = [] (q, r = q.divmod(256)) && a.unshift(r) until q.zero? a.join(".") end end convertIPrange('192.168.1.105', '192.168.1.108') # => ["192.168.1.105", "192.168.1.106", "192.168.1.107", "192.168.1.108"] convertIPrange('192.255.255.254', '193.0.0.1') # => ["192.255.255.254", "192.255.255.255", "193.0.0.0", "193.0.0.1"]